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。这个地方想了半天想不明白。