LeetCode 438. Find All Anagrams in a String
Description
Given a string s and a non-empty string p, find all the start indices of p’s anagrams in s.
Strings consists of lowercase English letters only and the length of both strings s and p will not be larger than 20,100.
The order of output does not matter
class Solution {
public List<Integer> findAnagrams(String s, String p) {
List<Integer> list = new ArrayList<>();
if (s == null || s.length() == 0 || p == null || p.length() == 0) {
return list;
}
int[] hash = new int[256];
for (char c : p.toCharArray()) {
hash[c]++;
}
int lo = 0;
int hi = 0;
int count = p.length();
while (hi < s.length()) {
if (hash[s.charAt(hi)] >= 1) {
count--;
}
hash[s.charAt(hi)]--;
hi++;
if (count == 0) {
list.add(lo);
}
if (hi - lo == p.length()) {
if (hash[s.charAt(lo)] >= 0) {
count++;
}
hash[s.charAt(lo)]++;
lo++;
}
}
return list;
}
}