-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Expand file tree
/
Copy path0438-find-all-anagrams-in-a-string.java
More file actions
29 lines (24 loc) · 1.05 KB
/
0438-find-all-anagrams-in-a-string.java
File metadata and controls
29 lines (24 loc) · 1.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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 current character is in sMap, remove it and re-update the map.
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;
}
}