3
public List<Integer> findAnagrams(String s, String p) {4
int fullMatchCount = p.length();5
Map<Character, Integer> anagramMap = new HashMap<>();7
for (Character c : p.toCharArray()) anagramMap.put(c, anagramMap.getOrDefault(c, 0) + 1);9
List<Integer> result = new ArrayList<>();10
int left = 0, right = 0, currentMatchCount = 0;11
Map<Character, Integer> currentAnagramMap = new HashMap<>();12
while (right < s.length()) {13
char c = s.charAt(right);14
if (anagramMap.get(c) == null) {15
currentAnagramMap = new HashMap<>();18
currentMatchCount = 0;21
currentAnagramMap.put(c, currentAnagramMap.getOrDefault(c, 0) + 1);24
if (currentAnagramMap.get(c) > anagramMap.get(c)) {25
char leftC = s.charAt(left);27
currentAnagramMap.put(leftC, currentAnagramMap.get(leftC) - 1);29
leftC = s.charAt(left);33
currentAnagramMap.put(c, currentAnagramMap.get(c) - 1);37
if (currentMatchCount == fullMatchCount) result.add(left);