public static List<Integer> findAnagrams(String s, String p) {
if(s.length()<p.length()){
return new ArrayList<>();
}
List<Integer> list=new ArrayList<>();
int[] arrp=new int[128];
int[] arrt=new int[128];
Arrays.fill(arrp,0);
Arrays.fill(arrt,0);
for(int i=0;i<p.length();i++){
arrp[p.charAt(i)]++;
}
int left=0;
int right=p.length();
for(int i=0;i<p.length();i++){
arrt[s.charAt(i)]++;
}
while(left<=s.length()-p.length()){
if(left==s.length()-p.length()){
if(Arrays.equals(arrp, arrt)){
list.add(left);
}
left++;
}else{
if(Arrays.equals(arrp, arrt)){
list.add(left);
}
arrt[s.charAt(left)]--;
arrt[s.charAt(right)]++;
left++;
right++;
}
}
return list;
}
经典的使用128数组来帮助存储char相关的数据信息,使用滑动窗口检测动态增删字符,随后对比数组是否相等,即可得知。