题目:

解析:
- 因为异位词的长度必须与p值的长度相等,所以我们可以设定一个count值来记录它走过的有效记录(s中与p值中元素相等的元素)
- 当记录过的s的元素与p中的元素的数量相同和字母相同时,我们就可以判断当前遍历过的s的元素是不是p的异位词
- 可以使用数组来模拟一个26个空间的hash表来存储s和p的元素,这样就可以判断s这个字符串是不是p的异位词
代码:
class Solution {
public List<Integer> findAnagrams(String ss, String pp) {
List<Integer> ret=new ArrayList<Integer>();
char []s=ss.toCharArray();
char []p=pp.toCharArray();
int []hash1=new int[26];
for(char ch:p) hash1[ch-'a']++;
int []hash2=new int[26];
int len=p.length;
for(int left=0,right=0,count=0;right<s.length;right++){
char in=s[right];
hash2[in-'a']++;
if(hash2[in-'a']<=hash1[in-'a']){
count++;
}
if(right-left+1>len){
char out=s[left];
if(hash2[out-'a']<=hash1[out-'a']){
count--;
}
hash2[out-'a']--;
left++;
}
if(count==len) ret.add(left);
}
return ret;
}
}