从labuladong的算法中一路学到了滑动窗口框架,感觉收获颇多:https://labuladong.gitbook.io/algo/mu-lu-ye/hua-dong-chuang-kou-ji-qiao-jin-jie
滑动窗口之前没有怎么接触,除了数据结构之中的kmp算法感觉与这类问题有相通之处。
看了两三遍之后基本理解了原理,并且能够默写这一框架,感觉挺实用。
class Solution {
public:
string minWindow(string s, string t) {
unordered_map<char,int> need,window;
for(int i = 0;i < t.size();i++){
char c = t[i];
need[c]++;
}
int left = 0,right = 0;
int valid = 0;
int start = 0, len = INT_MAX;
while(right < s.size()){
char c = s[right];
right++;
if(need.count(c)){
if(window[c] < need[c]){
valid++;
}
window[c]++;
}
while(valid == t.size()){
if(right - left < len){
start = left;
len = right - left;
}
char d = s[left];
left++;
if(need.count(d)){
if(window[d] == need[d]){
valid--;
}
window[d]--;
}
}
}
return len >= INT_MAX ? "":s.substr(start,len);
}
};