题目链接
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; } };