标准滑动窗口框架
把每次收缩的窗口长度符合的保存到集合中即可
lass Solution {
public List<Integer> findAnagrams(String s, String p) {
Map<Character,Integer> need = new HashMap<>();
List<Integer> res = new ArrayList<>();
int right = 0,left = 0;
int valid = 0;
int sizeS = s.length();
int sizeP = p.length();
if(sizeP>sizeS){
return res;
}
for(char c :p.toCharArray()){
need.put(c,need.getOrDefault(c,0)+1);
}
int needSize = need.size();
Map<Character,Integer> window = new HashMap<>();
while(right < sizeS){
char c = s.charAt(right);
right++;
if(need.containsKey(c)){
window.put(c,window.getOrDefault(c,0)+1);
if(window.get(c).equals(need.get(c))){
valid++;
}
}
while(valid==needSize){
if(right-left==sizeP){
res.add(left);
}
c = s.charAt(left);
left++;
if(need.containsKey(c)){
if(window.get(c).equals(need.get(c))){
valid--;
}
window.put(c,window.get(c)-1);
}
}
}
return res;
}
}