438 找到字符串中所有的字母异位词
滑动窗口 卡住短的数组 向长的数组进行比较 出现字符次数相同的就是一组异位词、
class Solution {
public List<Integer> findAnagrams(String s, String p) {
//存储结果
List<Integer> result = new ArrayList<>();
//charP存储p中字母出现的个数
int [] charP = new int[26];
//charS存储存在p.length中p异味词的次数
int [] charS = new int[26];
//先统计p中出现的词的个数
for (int c : p.toCharArray()) {
charP[c - 'a']++;
}
//右端点进入字符数组s
for (int right = 0; right < s.length(); right++) {
charS[s.charAt(right) - 'a']++;
//计算左窗口的位置
int left= right - p.length() + 1;
//窗口大小小于0的话 继续遍历
if (left<0){
continue;
}
//如果两个字符数组字符出现的次数相同
if (Arrays.equals(charS, charP)){
//将左窗口添加进去
result.add(left);
}
//窗口右移
charS[s.charAt(left) - 'a']--;
}
return result;
}
}