这是典型的滑动窗口,建议用两个Hash表,如果想优化,后期可以优化成一个,但两个Hash表不容易出错。是否已经包含,(不需要遍历一遍Hash表,这里有一个技巧,就是用一个count。滑动窗口始终维护住成立即可)
class Solution {
public:
string minWindow(string s, string t) {
unordered_map<char,int> hs,ht;
for(auto c:t) ht[c]++;
string res;
int count = 0, len = s.size()+1;
for(int i=0,j=0;j<s.size();j++){
if(hs[s[j]]<ht[s[j]]) count++;
hs[s[j]]++;
while(hs[s[i]]>ht[s[i]]) hs[s[i++]]--;
if(count==t.size()&&j-i+1<len){
len = j-i + 1;
res = s.substr(i,j-i+1);
}
}
return res;
}
};