leetcode-76. 最小覆盖子串

leetcode-76. 最小覆盖子串_第1张图片
思路:滑动窗口即双指针

  • 框架

终止条件:
窗口内添加元素
while(符合条件)
弹出元素

class Solution {
public:
    string minWindow(string s, string t) {
    unordered_map<char,int> memot;
    int sizet=0;
    for(int i=0;i<t.size();i++){
        char temp=t[i];
        if(memot.find(temp)==memot.end()){
            memot[temp]=1;
            sizet++;
        }
        else memot[temp]++;
    }
    int sizes=0;
    int resl=0,resr=s.size()+1;
    unordered_map<char,int> memos;
    for(int left=0,right=0;right<s.size()&&left<=right;right++){
        int t=s[right];
        memos[t]=(memos.find(t)==memos.end()?1:memos[t]+1);
        if(memos[t]==memot[t]) sizes++;
        while(sizes==sizet){
            int t=s[left];
            if(resr-resl>right-left){
                resl=left;
                resr=right;
            }
            if(memos[t]==memot[t]){
                sizes--;
            }
            memos[t]--;
            left++;
        }
        
    }
     return resr-resl>s.size()?"":s.substr(resl,resr-resl+1);
    }
};

你可能感兴趣的:(leetcode+算法)