我只想说这个题目被我写成了一坨翔。。。。
需要重写。。。mark
class Solution {
public:
bool containsT(vector<int> &S, vector<int> &T){
for(int i = 0; i < 256; i++){
if(S[i] < T[i]) return false;
}
return true;
}
void initHashT(string T, vector<int> &hashT){
for(int i = 0; i < T.size(); i++){
hashT[T[i]]++;
}
}
string minWindow(string S, string T) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(S.empty() || T.empty() || S.size() < T.size()) return "";
vector<int> hashS(256,0);
vector<int> hashT(256,0);
initHashT(T, hashT);
int N = S.size();
int p = 0;
while(hashT[S[p]]==0){
if(p>=N) return "";
p++;
}
int q = p;
do{
hashS[S[q]]++;
q++;
}while(q < N && !containsT(hashS, hashT));
if(!containsT(hashS, hashT)) return "";
int resultP = p;
int len = q-p;
while(q<=N){
while(containsT(hashS, hashT)){
if(q-p < len){
resultP = p;
len = q-p;
}
hashS[S[p]]--;
p++;
}
while(!containsT(hashS, hashT) && q <= N){
hashS[S[q]]++;
q++;
}
if(containsT(hashS, hashT) && q-p < len){
resultP = p;
len = q-p;
}
}
return S.substr(resultP, len);
}
};