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

来源:3-8 在滑动窗口中做记录 Longest Substring Without Repeating Characters

慕工程2559728

2018-07-18

 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回答

liuyubobobo

2018-07-18

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


不要光想,题目中给的第二个测试用例(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
1
慕工程2559728
非常感谢波波老师!
2018-07-19
共1条回复

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7410 学习 · 1150 问题

查看课程