要求:找起始下标
思路:滑动窗口,击败90%
class Solution {
public:
vector<int> findAnagrams(string s, string p) {
vector<int> vp(26);
for(char &c:p)
vp[c-'a']++;
int n=s.size();
int left=0,right=0;
vector<int> ans;
vector<int> tmp(26);
while(right<n){
if(vp[s[right]-'a']==0){//遇到不在里面的跳过去
left=++right;
tmp.clear();
tmp.resize(26);
continue;
}
if(vp[s[right]-'a']==tmp[s[right]-'a']){//遇到多的跳到上一个多的后
while(s[left]!=s[right]){
tmp[s[left]-'a']--;//注意这里要更新
++left;
}
++left;
++right;
continue;
}
tmp[s[right]-'a']++;
if(right-left+1==p.size()){
ans.push_back(left);
tmp[s[left]-'a']--;
++left;
++right;
}
else ++right;
}
return ans;
}
};