219. 存在重复元素

4/14/2021 Leetcode
class Solution {
public:
    string minWindow(string s, string t) {
        unordered_map<char,int> window,need;
        for(char c:t){
            need[c]++; 
        }
        int left = 0,right = 0;
        int vaild = 0;
        int start = 0,len = INT_MAX;
        while(right<s.size()){
            char c = s[right];
            right++;
            if(need.count(c)){
                window[c]++;
                if(window[c]==need[c]){
                    vaild ++;
                }
            }

            while(vaild == need.size()){
                if(right-left<len){
                    len = right-left;
                    start = left;
                }
                char d = s[left];
                left++;
                if(need.count(d)){
                    if(window[d]==need[d]){
                        vaild--;
                    }
                    window[d]--;
                }
            }
        }
        return len == INT_MAX ? "" : s.substr(start, len);
    }
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38