给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。
示例:
输入: S = "ADOBECODEBANC", T = "ABC"
输出: "BANC"
说明:
如果 S 中不存这样的子串,则返回空字符串 ""。
如果 S 中存在这样的子串,我们保证它是唯一的答案。
class Solution {
public:
string minWindow(string s, string t) {
int len = t.size();
int tm[256] = {0};
for(int i = 0; i< len; i++) {
tm[t[i]] ++;
}
int l,r;
int cur = 0;
int res = s.size();
string str;
for( r = 0,l = 0; r < s.size(); r++) {
tm[s[r]]--;
if(tm[s[r]] >= 0)
cur ++;
while(cur == len){
if(res >= (r - l + 1)){
res = r - l + 1;
str = s.substr(l,r - l + 1);
}
tm[s[l]]++;
if(tm[s[l]] > 0)
cur--;
l++;
}
}
return str;
}
};