class Solution {
public List<Integer> findAnagrams(String s, String p) {
List<Integer> res=new LinkedList<>();
int sLen = s.length(),pLen=p.length();
if (pLen>sLen){
return res;
}
//s链表
int[] sChar=new int[26];
//标准窗口(比对项)
int[] pChar=new int[26];
//滑动窗口比对项
for (int i = 0; i < pLen; i++) {
sChar[s.charAt(i)-'a']++;
pChar[p.charAt(i)-'a']++;
}
//初始化的窗口是否相同,这里提前判断,让后面的for的判断聚焦于窗口尾部
if (Arrays.equals(sChar,pChar)){
res.add(0);
}
for (int i = pLen; i < sLen; i++) {
//将每次滑动后,被移除窗口的那个数字的字符所在位置数量-1
sChar[s.charAt(i-pLen)-'a']--;
//当前位置字符数量+1
sChar[s.charAt(i)-'a']++;
//窗口比对,check过程
if (Arrays.equals(sChar,pChar)){
res.add(i-pLen+1);
}
}
return res;
}
}