滑动窗口
import java.util.*;
public class Solution {
public ArrayList<Integer> findWord (String s, String p) {
HashMap<Character,Integer> window = new HashMap<>();
HashMap<Character,Integer> need = new HashMap<>();
for(char c:p.toCharArray()){
need.put(c,need.getOrDefault(c,0)+1);
}
int valid = 0;
ArrayList<Integer> res = new ArrayList<>();
int left=0,right=0;
while(right < s.length()){
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++;
}
}
if(right-left == p.length()){
if(valid == need.size()){
res.add(left);
}
char ch = s.charAt(left);
left++;
if(window.containsKey(ch)){
if(window.get(ch).equals(need.get(ch))){
valid--;
}
window.put(ch,window.get(ch)-1);
}
}
}
return res;
}
}