這是典型的滑動窗口,建議用兩個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;
}
};