class Solution {
public:
vector<int> findAnagrams(string s, string p) {
vector<int> result;
unordered_map<int,int> umap;
for(auto e:p) umap[e]++;
int valid=0,total=umap.size();
for(int i=0,j=0;i<s.size();++i){//左边每移除一个字符就++,右边每出现一个字符就--
umap[s[i]]--;
if(umap[s[i]]==0) valid++;
while(i-j+1>p.size()){
if(umap[s[j]]==0) valid--;
umap[s[j]]++;//因为左边每移动一次,相对应的数量是+1的
j++;
}
if(valid==total) result.push_back(j);
}
return result;
}
};
力扣-438题 找到字符串中所有字母异位词(C++)- 滑动窗口,类似力扣第三题
最新推荐文章于 2025-05-11 15:41:31 发布