【LeetCode】438. 找到字符串中所有字母异位词

class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        int n1=s.size(),n2=p.size();
        vector<int> ans;
        if(n1<n2)
            return ans;
            
        vector<int> counts(26),countp(26);
        for(int i=0;i<n2;++i)
        {
            ++countp[p[i]-'a'];
        }

        int left,right,start=-1;

        for(int j=0;j<=n1-n2;++j)    //构造第一个滑动窗口
        {
            if(countp[s[j]-'a'])
            {
                start=j;
                for(int k=0;k<n2;++k)
                {
                    ++counts[s[j+k]-'a'];
                }
                if(counts!=countp)
                {
                    break;
                }
                ans.emplace_back(j);
                break;
            }
        }

        if(start!=-1)               //若有满足条件的滑动窗口,则继续构建
        for(int j=start+1;j<=n1-n2;++j)
        {
            --counts[s[j-1]-'a'];
            ++counts[s[j+n2-1]-'a'];
            if(counts!=countp)   
            {
                continue;
            }
            ans.emplace_back(j);
        }
        return ans;
    }
};

思路同上一题,改变循环结束条件就可以。

上一篇:Leetcode 组合总和问题


下一篇:【LeetCode】560. 和为 K 的子数组