Leetcode 438 : Find All Anagrams in a String
Solution to Find All Anagrams in a String problem.
class Solution {
public List<Integer> findAnagrams(String s, String p) {
List<Integer> res = new ArrayList<>();
int[] freq = new int[26];
for(char c : p.toCharArray()) {
freq[c - 'a']++;
}
int start = 0;
int match = 0;
for(int end=0;end<s.length();end++) {
char c = s.charAt(end);
freq[c - 'a']--;
if(freq[c - 'a'] >= 0) {
match++;
}
if(match == p.length()) {
res.add(start);
}
if( (end - start)+1 == p.length()) {
char charGoingOut = s.charAt(start);
freq[charGoingOut - 'a']++;
if(freq[charGoingOut - 'a'] > 0) {
match--;
}
start++;
}
}
return res;
}
}