双指针。。。经典题。。。
注意一些边界TAT
class Solution { public: string minWindow(string S, string T) { int start = 0; int end = 0; vector<int>cnt(256,0); vector<int>inc(256,0); int lens = S.size(); int lent = T.size(); for(int i = 0 ; i < lent ; i++) cnt[T[i]] ++; int tmp = 0; int minl = INT_MAX; int mins,mine; while(end <= lens){ if(tmp == lent){ if(end - start < minl){ minl = end - start; mins = start; mine = end; } if(inc[S[start]] > cnt[S[start]]) { inc[S[start]] --; }else if(inc[S[start]] &&inc[S[start]] <= cnt[S[start]]){ inc[S[start]] --; tmp--; } start ++; continue; } if(cnt[S[end]] == 0){ end++; continue; } if(inc[S[end]] < cnt[S[end]]){ tmp ++; } inc[S[end]]++; end++; } if(minl == INT_MAX)return ""; return S.substr(mins , minl); } };