本题源自LeetCode
---------------------------------------------------------
思路: 用俩个map,标记T的子串各个字符的数量。
代码
string minWindow(string S, string T) {
int len1=S.length();
int len2=T.length();
int start=0;
int count=0;
string result;
map<char,int> t;
map<char,int> s;
for(int i=0;i<len2;i++){ //统计T串各个字符出现的次数
t[T[i]]++;
}
for(int i=0;i<len1;i++){
if(t[S[i]]!=0){ //字符相等
s[S[i]]++;
if(s[S[i]]<=t[S[i]])
count++;
while(count==len2){
if(result.empty()||result.length()>i-start+1)
result=S.substr(start,i-start+1);
if(t[S[start]]){ //将start 移动到S中出现第一个T的字符处。
s[S[start]]--;
if(s[S[start]]<t[S[start]])
count--;
}
start++;
}
}
}
return result;
}