码迷,mamicode.com
首页 > Windows程序 > 详细

Minimum Window Substring

时间:2015-01-09 00:17:50      阅读:278      评论:0      收藏:0      [点我收藏+]

标签:c++   指针   

尾指针不断往后扫,当扫到有一个窗口包含了所有T的字符,头指针收缩头指针。得到窗口最小的情况


class Solution {
public:
    string minWindow(string S, string T) {
        int slen = S.size();
        int tlen = T.size();                //  record T[i]
        int need[256] = {0},has[256] = {0}, cnt = 0, ans = slen+1, mBegin, mEnd ;
        for(int i = 0; i < tlen; i++)
              ++need[T[i]];
        for(int begin = 0, end = 0; end < slen; end++){
          if(need[S[end]] == 0) continue;           //find T[i]
          ++has[S[end]];
          if(has[S[end]] <= need[S[end]])
            ++cnt;                                     //number of map
          if(cnt == tlen){
            while(need[S[begin]] == 0 || has[S[begin]]  > need[S[begin]]){
               if(has[S[begin]] > need[S[begin]])
                   --has[S[begin]];
                begin++;
            }
            int l = end - begin+1;
            if(l < ans){
               mBegin = begin;
               mEnd = end;
               ans = l;
            }
          }
        }
        return ans <= slen?S.substr(mBegin, mEnd- mBegin+1):"";
    }
};


Minimum Window Substring

标签:c++   指针   

原文地址:http://blog.csdn.net/sina012345/article/details/42509021

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!