题目来源:https://leetcode-cn.com/problems/find-all-anagrams-in-a-string/
class Solution {
public List<Integer> findAnagrams(String s, String p) {
char[] chS = s.toCharArray();
char[] chP = p.toCharArray();
int[] freq = new int[26];//记录p字符串中出现字符的频率
int[] window = new int[26];//记录窗口中字符出现的频率
for(int i = 0;i<p.length();i++){
freq[chP[i]-'a']++;
}
ArrayList<Integer> res = new ArrayList<Integer>();
int l = 0,r = 0;
int len = s.length();
while(r<len){
//右边界不断扩大
int cur = chS[r]-'a';
window[cur]++;
r++;
//如果窗口中,当前字符数量太多,左边界收缩,直到把多余的字符抛出
while(window[cur]>freq[cur]){
int start = chS[l]-'a';
window[start]--;
l++;
}
//把满足条件的结果添加到结果集
if(r-l == p.length()){
res.add(l);
}
}
return res;
}
}