解题思路
class Solution {
public:
string minWindow(string s, string t) {
vector<int> need(128,0);//用need数组记录我们所需要的元素
for(char c : t){
need[c]++;
}
int needcount=t.size();
int ii=0,jj=0;//定义滑动窗口
string res;
int length=INT_MAX;
for(jj=0;jj<s.size();jj++){
char c=s[jj];
if(need[c]>0){//判断该字符是否是我们所需要的
needcount--;
}
need[c]--;//-1/0
if(needcount==0){
while(ii<jj&&need[s[ii]]<0) {//缩减左窗口,排除多余元素
need[s[ii++]]++;//1、ii要右移 2、need[s[ii]]数组也要释放
}
if(jj-ii+1<length&&ii<=jj){
//记录长度,更新结果
length=jj-ii+1;
res=s.substr(ii,length);
}
//ii++寻找下一个满足条件的滑动窗口
need[s[ii++]]++;//1、ii要右移 2、need[s[ii]]数组也要释放
needcount++;
}
}
return (length==INT_MAX)? "":res;//如果res始终没被更新过,代表无满足条件的结果
}
};