题目链接

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;
    }
};