1957

无聊蛋疼的1957写的低端博客
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[leetcode]Minimum Window Substring

Posted on 2014-01-03 00:33  1957  阅读(317)  评论(0编辑  收藏  举报

双指针。。。经典题。。。

注意一些边界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);
    }
};