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"
.
Note:
If there is no such window in S that covers all characters in T, return the emtpy string ""
.
If there are multiple such windows, you are guaranteed that there will always be only one unique minimum window in S.
class Solution {
public:
/*algorithm: sliding window
1)find sub string s[l..r] include T's char set
2)slide window ,and update the sub string
time O(n) space O(1)
*/
bool containT(int S[58],int T[58]){
for(int i = 0;i < 58;i++){
if(S[i] < T[i])return false;
}
return true;
}
//'a':97, 'A':65
string minWindow(string s, string t) {
int len = INT_MAX,start;
int tmap[58]={0},smap[58]={0};
for(int k = 0;k < t.size();k++)tmap[t[k]-'A']++;
for(int i = 0,j = 0;j < s.size();j++){
smap[s[j]-'A']++;
while(containT(smap,tmap)){
if((j-i+1) < len){
len = j-i+1;
start = i;
}
smap[s[i]-'A']--;
++i;
}
}
return len == INT_MAX?"":s.substr(start,len);
}
};