请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

438题问题,波波老师麻烦看一下,想了半天没想明白

 public List<Integer> findAnagrams(String s, String p) {

    List<Integer> list = new ArrayList<>();

    if (s == null || s.length() == 0 || p == null || p.length() == 0) return list;

    int[] hash = new int[256];

    for (char c : p.toCharArray()) {

        hash[c]++;

    }

    int left = 0, right = -1, count = p.length();

    while (right < s.length()) {

        if (right+1<s.length() && hash[s.charAt(++right)]-- >= 1) count--; 


        if (count == 0) list.add(left);


        if (right - left == p.length() && hash[s.charAt(left++)]++ >= 0 ) {

            count++;

        }

    }

    return list;

    }

正在回答

1回答

你的程序对于题目中给定的测试用例,就陷入了无穷循环哦:)


不要光想,题目中给的第二个测试用例(s: "abab" p: "ab"),s只有4个字符,p只有2个字符,足够小。用这个测试用例跟进自己的程序里,看看究竟发生了什么,为什么陷入了无穷循环?然后想想自己哪里想错了?只有这样,自己亲自实践,亲自调代码,最终找到自己的问题,意识到自己思维的漏洞,才能进步哦:)


如果需要,可以参考我的Leetcode题解github中这个问题的C++代码。虽然使用的是C++语言,但是逻辑是一样的,相信你能看懂:)

传送门:https://github.com/liuyubobobo/Play-Leetcode/blob/master/0438-Find-All-Anagrams-in-a-String/cpp-0438/main.cpp


加油!

1 回复 有任何疑惑可以回复我~
  • 提问者 慕工程2559728 #1
    非常感谢波波老师!
    回复 有任何疑惑可以回复我~ 2018-07-19 13:32:03
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信