class Solution {
public List<Integer> findAnagrams(String s, String p) {
int startIndex = 0;
Map<Character, Integer> pMap = new HashMap<>(), sMap = new HashMap<>();
List<Integer> res = new ArrayList<>();
for(char c: p.toCharArray())
pMap.put(c, 1 + pMap.getOrDefault(c, 0));
for(int i = 0; i < s.length(); i++) {
sMap.put(s.charAt(i), 1 + sMap.getOrDefault(s.charAt(i), 0));
if(i >= p.length() - 1) {
if(sMap.equals(pMap))
res.add(startIndex);
if(sMap.containsKey(s.charAt(startIndex))) {
sMap.put(s.charAt(startIndex), sMap.get(s.charAt(startIndex)) - 1);
if(sMap.get(s.charAt(startIndex)) == 0)
sMap.remove(s.charAt(startIndex));
}
startIndex += 1;
}
}
return res;
}
}