其他分享
首页 > 其他分享> > leetcode 438. 找到字符串中所有字母异位词-滑动窗口

leetcode 438. 找到字符串中所有字母异位词-滑动窗口

作者:互联网

在这里插入图片描述

解题思路:

  • 本题的思路和上一篇博客思路一样,都采用滑动窗口算法来解决字串问题,同样也是必须保持连续,那么需要在更新左指针的策略上做出调整
class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        vector<int>res;
        unordered_map<char,int>need,window;
        for(char c : p){
            //默认当map中没有key值得时候会,创建对应key值并且初始对应的int值为0
            need[c]++;
        }
        // 初始化左右指针
        int left = 0,right = 0;
        //初始化判断满足的条件
        int valid = 0;
        while(right<s.size()){
            char pc = s[right];
            right++;
            if(need.count(pc)){
                window[pc]++;
                if(need[pc]==window[pc]){
                    valid++;
                }
            }
            // 左指针移动策略
            while(right-left >= p.size()){
                //判断满足条件
                if(valid==need.size()){
                    res.push_back(left);
                }
                char rc = s[left];
                left++;
                if(need.count(rc)){
                    if(need[rc] == window[rc]){
                        valid--;
                    }
                    window[rc]--;
                }
            }
        }
        return res;
    }
};

标签:right,++,异位,pc,window,438,rc,need,leetcode
来源: https://blog.csdn.net/jhb1021821368/article/details/117848615