https://leetcode.com/problems/minimum-window-substring/
//滑动窗口 双指针
//begin开始指向0, end一直后移,直到begin - end区间包含T中所有字符。记录窗口长度d
//然后begin开始后移移除元素,直到移除的字符是T中的字符则停止,此时T中有一个字符没被包含在窗口,
//继续后移end,直到T中的所有字符被包含在窗口,重新记录最小的窗口d。
//如此循环知道end到S中的最后一个字符。
class Solution {
public:
string minWindow(string s, string t) {
string res;
if(!s.size()||!t.size()) return res;
map<char, int>Temp;
int left=0,count=0;
int minLen=s.size()+1;
for(int i=0;i<t.size();i++) Temp[t[i]]+=1;
for(int right=0; right<s.size();right++){
if(Temp.find(s[right])!=Temp.end()){
if(Temp[s[right]]>0){
count+=1;
}
Temp[s[right]]-=1;
while (count==t.size()) {//满足了
if(Temp.find(s[left])!=Temp.end()){
if(minLen>right-left+1){
minLen=right-left+1;
res=s.substr(left,right-left+1);
}
Temp[s[left]]+=1;
if(Temp[s[left]]>0) count-=1;
}
left+=1;
}
}
}
return res;
}
};