美文网首页
lintcode32 最小子串覆盖

lintcode32 最小子串覆盖

作者: 小雨启明 | 来源:发表于2018-11-08 21:58 被阅读0次

    1、t[256] 记录 target字符串每个字符出现的次数;
    2、int start, i;
    i首先遍历source,遍历到从 start 到 i 的子串包含 target ;是否包含根据两个数组间的值来判断找到的字符数量,来判断是否包含。
    然后从start开始遍历,去除无用的字符。
    用变量begin、end保存当前start 到 i的字符串。

    start后移一位,此时一定不满足包含条件,再后移 i 找到新的符合条件的字符串。
    参考:https://blog.csdn.net/u012156116/article/details/80648698

    class Solution {
    public:
       /**
        * @param source : A string
        * @param target: A string
        * @return: A string denote the minimum window, return "" if there is no such a string
        */
       string minWindow(string &source , string &target) {
           // write your code here
           int *t = new int[256]();
           
           for(int i = 0;i < target.length();i++){
               t[target[i]]++;
           }
           
           int *s = new int[256]();
           int found = 0;                    //找到的字符数量
           int start = 0;
           int begin = 1,end = 0;
           int len  = source.length()+1;
           
           for(int i = 0;i < source.length();i++){
               s[source[i]]++;
               if(s[source[i]] <= t[source[i]]) //target中没有的为0,存在的话,source取到一次就加1。
               {
                   found++;
               }
               if(found == target.length()){
                   while(start < i && s[source[start]] > t[source[start]]){
                       s[source[start]]--;
                       start++;
                   }                         //去除前面多余的字符
                   
                   if(i-start+1 < len){
                       begin = start;
                       end  = i;
                       len = i - start + 1;
                   }
                   start++;                  //将start后移 寻找其他子串
                   found--;                  //后移后 肯定不再满足条件
               }
           }
           if(begin > end){
               return "";                    //对应一个子串也没找到的情况
           }
           string res = source.substr(begin,end-begin+1);
           return res;
       }
    };
    

    相关文章

      网友评论

          本文标题:lintcode32 最小子串覆盖

          本文链接:https://www.haomeiwen.com/subject/pqnpxqtx.html