package leetcode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class demo_438 {
public List<Integer> findAnagrams(String s, String p) {
List<Integer> list=new ArrayList<Integer>();
if(s.length()<p.length()) {
return list;
}
//滑动窗口,用数组存储当前窗口每个字母存在的个数
int[] pnum=new int[26];
int[] snum=new int[26];
for(int i=0;i<p.length();i++) {
pnum[p.charAt(i)-'a']++;
snum[s.charAt(i)-'a']++;
}
//判断当前数组是否相等
if(Arrays.equals(snum, pnum)) {
list.add(0);
}
for(int i=0;i<s.length()-p.length();i++) {
//删除左边界
snum[s.charAt(i)-'a']--;
//加入右边界,即为窗口滑动
snum[s.charAt(i+p.length())-'a']++;
//判断当前当前数组是否相等,因为窗口已经向右滑动一个,即i+1
if(Arrays.equals(snum, pnum)) {
list.add(i+1);
}
}
System.out.println(list);
return list;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
demo_438 demo=new demo_438();
String s="cbaebabacd";
String p="abc";
demo.findAnagrams(s, p);
}
}