解题思路:滑动窗口+哈希
class Solution {
public:
string minWindow(string s, string t) {
unordered_map<char,int>map,p;
for(char ch:t) p[ch]++;//存储t内字符及其数量
string res;
for(int right=0,left=0,corr=0;right<s.size();right++){
//left,right,corr分别是窗口的左边界,有边界及在t中出现字符的数量
map[s[right]]++;//右边界移动
if(p.count(s[right])&&map[s[right]]<=p[s[right]]) corr++;
while(left<right&&map[s[left]]>p[s[left]]) map[s[left++]]--;//左边界移动,仅会移除左端多余的字符
if(corr==t.size()){//窗口内包含t中所有字符,对子串进行比较
if(res.empty()||res.size()>right-left+1) res=s.substr(left,right-left+1);
}
}
return res;
}
};