https://leetcode.com/problems/find-all-anagrams-in-a-string/
找出字符串s中字符串p的异构体
维持一个滑动窗口,用count记录当前距离p的长度还差的长度,hash数组维护各个字符还应该出现的次数,right右移的时候,对应hash--,left右移的时候,对应hash++
public class Solution {
public List<Integer> findAnagrams(String s, String p) {
List<Integer> res = new LinkedList<>();
int[] hash = new int[256];
for (int i = 0; i < p.length(); i++) {
hash[p.charAt(i)]++;
}
int left = 0;
int right = 0;
int count = p.length();
while (right < s.length()) {
if (hash[s.charAt(right)] >= 1) {
count--;
}
hash[s.charAt(right)]--;
right++;
if (count == 0) {
res.add(left);
}
if (right - left == p.length()) {
// 如果此时count == 0,那么hash[s.charAt(left)]一定等于0
if (hash[s.charAt(left)] >= 0) {
count++;
}
hash[s.charAt(left)]++;
left++;
}
}
return res;
}
}