给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。
JAVA:
class Solution {
public List<Integer> findAnagrams(String s, String p) {
ArrayList<Integer> list=new ArrayList<>();
int slen=s.length(),plen=p.length();
if(plen>slen) return list;
int[] arrs=new int[26];
int[] arrp=new int[26];
for(int i=0;i<plen;i++){
arrs[s.charAt(i)-'a']+=1;
arrp[p.charAt(i)-'a']+=1;
}
if(Arrays.equals(arrs,arrp)){
list.add(0);
}
for(int i=1;plen+i-1<slen;i++){
arrs[s.charAt(i-1)-'a']-=1;
arrs[s.charAt(plen+i-1)-'a']+=1;
if(Arrays.equals(arrs,arrp)){
list.add(i);
}
}
return list;
}
}