题目链接
https://leetcode-cn.com/problems/find-all-anagrams-in-a-string/
解题思路
比 最小覆盖字串 简单
无非是本题要保持区间[L,R]长度为p的长度,判断这个区间是否满足。
AC代码
class Solution {
public:
vector<int> findAnagrams(string s, string p) {
map<char,int> cnt;
vector<int> v;
int n=s.size(),m=p.size(),L=1,num=0,count=0,ans[20200];
s='.'+s;p='.'+p;
for(int i=1;i<=m;i++) cnt[p[i]]++;
for(int R=1;R<=n;R++) {
if(--cnt[s[R]]>=0) ++count;
if(count==m) ans[++num]=L;//先判断是否满足
if(R-L+1==m) if(++cnt[s[L]]>0) --count;//再判断是否需要--//二者次序不可换
if(R-L+1>=m) L++;//让区间[L,R]长度保持为p的长度,除了刚开始
}
for(int i=1;i<=num;i++) v.push_back(ans[i]-1);
return v;
}
};
京公网安备 11010502036488号