有关438题
来源:3-8 在滑动窗口中做记录 Longest Substring Without Repeating Characters
慕仰7036876
2020-11-17
public List<Integer> findAnagrams(String s, String p) {
char[] pArr = p.toCharArray();
char[] sArr = s.toCharArray();
List<Integer> res = new ArrayList();
int[] needs = new int[26];
int[] window = new int[26];
for (int i = 0; i < pArr.length; i++) {
needs[pArr[i] - 'a']++;
}
int l = 0, r = 0;
while (r < sArr.length) {
int curR = sArr[r] - 'a';
r++;
window[curR]++;
while (window[curR] > needs[curR]) {
int curL = sArr[l] - 'a';
window[curL]--;
l++;
}
if (pArr.length == r - l) {
res.add(l);
}
}
return res;
}
老师我想问的是438题,我的答案写的是
if(pArr.length == r - l + 1){
res.add(l);
}
答案不通过,但是改为了r - l就通过了,我想问一下明明目标字符串的值应该等于的是r - l + 1呀。比如目标字符串是3个字符组成的,那么就应该是2 - 0 + 1才对,如果是 r - l的话,那么就变成2 - 0了呀。就是2了,不会等于3。这个地方想了半天想不明白。
写回答
1回答
-
int curR = sArr[r] - 'a';
r++; // 因为你在这里 r ++ 了。所以你的 r 指向不是 curR 字符的位置了,而是这个位置的后一个位置。
使用一个小的测试用例,实际运行跟踪一下,看看你的程序中 r 到底是谁?再怎么变化?和你想象的逻辑是否一样?如果不一样,哪里不一样?自己哪里想错了?进步就在这个过程中哦。
继续加油!:)
022020-11-18
相似问题