Find All Anagrams in a String LeetCode solution in Java

1
class Solution {
2

3
public List<Integer> findAnagrams(String s, String p) {
4
int fullMatchCount = p.length();
5
Map<Character, Integer> anagramMap = new HashMap<>();
6

7
for (Character c : p.toCharArray()) anagramMap.put(c, anagramMap.getOrDefault(c, 0) + 1);
8

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<>();
16
right++;
17
left = right;
18
currentMatchCount = 0;
19
continue;
20
}
21
currentAnagramMap.put(c, currentAnagramMap.getOrDefault(c, 0) + 1);
22
currentMatchCount++;
23

24
if (currentAnagramMap.get(c) > anagramMap.get(c)) {
25
char leftC = s.charAt(left);
26
while (leftC != c) {
27
currentAnagramMap.put(leftC, currentAnagramMap.get(leftC) - 1);
28
left++;
29
leftC = s.charAt(left);
30
currentMatchCount--;
31
}
32
left++;
33
currentAnagramMap.put(c, currentAnagramMap.get(c) - 1);
34
currentMatchCount--;
35
}
36

37
if (currentMatchCount == fullMatchCount) result.add(left);
38

39
right++;
40
}
41
return result;
42
}
43
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0