找到字符串所有字母异位词
滑动窗口。滑动窗口大小为待比较数组的大小。
class Solution {
public:
vector<int> findAnagrams(string s, string p) {
//滑动窗口
vector<int>result;
if(s.size()<p.size())
return result;
vector<int>pnum(26,0);//记录p的字母
vector<int>snum(26,0);//记录滑动窗口的字母
//先填满窗口
for(int i=0;i<p.size();i++)
{
snum[s[i]-'a']++;
pnum[p[i]-'a']++;
}
//当vector里的元素是基本数据类型时,可以直接使用 "==", "!=", ">=","<=" 来对两个vector进行比较。
if(pnum==snum)
{
result.push_back(0);
}
//滑动窗口
for(int i=0;i<s.size()-p.size();i++)
{
snum[s[i]-'a']--;
snum[s[i+p.size()]-'a']++;
if(snum==pnum)
{
result.push_back(i+1);
}
}
return result;
}
};