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:
string minWindow(string S, string T) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int sizeS = S.size();
int sizeT = T.size();
int length = INT_MAX;
int position = 0;
int countChar = 0;
vector<int> vectorMap(256,0);
for(int i=0;i<sizeT;i++)
{
vectorMap[T[i]]++; //构造字符哈希
}
for(int i=0;i<256;i++)
{
if(vectorMap[i])
{
countChar++; //T中共有几个不同的字符
}
}
int j = 0; //双指针i与j,j指向头,i指向尾。
for(int i=0;i<sizeS;i++)
{
vectorMap[S[i]]--;
if(vectorMap[S[i]]==0)
{
countChar--;
}
while(vectorMap[S[j]]<0) //多余的字符
{
vectorMap[S[j]]++;
j++;
}
if(countChar==0&&i-j+1<length)
{
length = i-j+1;
position = j;
}
}
return (length==INT_MAX)?"":S.substr(position,length);
}
};