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
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