Minimum Window Substring
Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).
For example,
S = “ADOBECODEBANC”
T = “ABC”
Minimum window is “BANC”.
题目的要求是寻找最小覆盖子串,如果找不到返回”“。在解题过程中,我们可以利用hash的思想,用thash[T[i]]来存储,字符串T中各个单词出现的次数。
class Solution {
public:
string minWindow(string s, string t) {
vector<int> shash(128,0);
vector<int> thash(128,0);
for(int i=0;i<t.size();i++){
thash[t[i]]++;
}
int beg=-1,end=s.size(),start=0,found=0;
int min_len=s.size();
for(int i=0;i<s.size();i++){
shash[s[i]]++;
if(shash[s[i]]<=thash[s[i]]){//通过found来判断是否找到了所有t中的单词
found++;
}
if(found==t.size()){
while(start<i&&shash[s[start]]>thash[s[start]]){ //过滤掉字符串s中不属于t的字符
shash[s[start]]--; //或者属于t中的字符,但不是坐标最大的那个,如bba,ba取第二个b
start++;
}
if(i-start+1<=min_len){
beg=start;
end=i;
min_len=i-start+1;
}
shash[s[start]]--;
start++;
found--;
}
}
if(beg==-1)
return "";
else
return s.substr(beg,end-beg+1);
}
};