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回答
-
你的程序对于题目中给定的测试用例,就陷入了无穷循环哦:)
不要光想,题目中给的第二个测试用例(s: "abab" p: "ab"),s只有4个字符,p只有2个字符,足够小。用这个测试用例跟进自己的程序里,看看究竟发生了什么,为什么陷入了无穷循环?然后想想自己哪里想错了?只有这样,自己亲自实践,亲自调代码,最终找到自己的问题,意识到自己思维的漏洞,才能进步哦:)
如果需要,可以参考我的Leetcode题解github中这个问题的C++代码。虽然使用的是C++语言,但是逻辑是一样的,相信你能看懂:)
加油!
112018-07-19
相似问题