其他分享
首页 > 其他分享> > 【LeetCode】438. 找到字符串中所有字母异位词

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

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

标签:26,string,int,异位,vector,438,n1,LeetCode,size
来源: https://www.cnblogs.com/zzxcm/p/15864773.html