1.代码
cpp
#include<array>
class Solution {
public:
vector<int> findAnagrams(string s, string p) {
vector<int> result;
int lens = s.size();
int lenp = p.size();
array<int, 26> s1 = {0};
array<int, 26> p1 = {0};
if(lens < lenp){
return result;
}
for(char c:p){
p1[int(c-'a')] ++;
}
for(int i = 0;i < lenp;i ++){
s1[int(s[i]-'a')] ++;
}
for(int i = 0;i <= lens-lenp;i ++){
if(s1 == p1){
result.push_back(i);
}
if(i == lens-lenp) break;
s1[int(s[i]-'a')] --;
s1[int(s[i+lenp]-'a')] ++;
}
return result;
}
};
2.思路
在s中构造一个长度与p相同的滑动窗口,用两个数组分别记录p和滑动窗口中的字母种类和数量,若两个数组完全相同,则表示找到一个字母异位词,将此时滑动窗口的起始位置加入result。