zoukankan      html  css  js  c++  java
  • 76. Minimum Window Substring (String, Map)

    Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).

    For example,
    S = "ADOBECODEBANC"
    T = "ABC"

    Minimum window is "BANC".

    Note:
    If there is no such window in S that covers all characters in T, return the empty string "".

    If there are multiple such windows, you are guaranteed that there will always be only one unique minimum window in S.

    思路:问题可以转变为,T中各个字符的数量<= window中的这些字符的数量,所以用map纪录字符与字符数量的关系

    class Solution {
    public:
        bool ifContain(map<char,int>& source, map<char,int>& target) //check if S contains T
        {
            for(map<char,int>::iterator it = target.begin(); it != target.end(); it++) //map的遍历
            {
                if(source[it->first] < it->second) return false;
            }
            return true;
        }
    
        string minWindow(string S, string T) {
            int minLength = INT_MAX;
            int start = 0, end = 0, minStart = 0, minEnd = 0;
            map<char,int> source;
            map<char,int> target;
            source[S[start]]++; //map的插入[法I]source[key]=value; [法II]source.insert(make_pair(key,value));
            for(int i = 0; i< T.length(); i++)
            {
                target[T[i]]++;
            }
            while(1)
            {
                if(ifContain(source, target)){
                    if(end-start+1 < minLength)
                    {
                        minStart = start;
                        minEnd = end;
                        minLength = end-start+1;
                        if(minLength == T.size()) return S.substr(minStart,minLength);
                    }
                    source[S[start]]--; //寻找更小的窗口
                    start++; 
                } 
                else //不包含,则扩大窗口
                {
                    end++;
                    if(end==S.size()) break;
                    source[S[end]]++;
                }
            }
            if(minLength>S.size()) return "";
            else return S.substr(minStart,minLength);
        }
    };
  • 相关阅读:
    错误解决mysql
    (一)熟悉执行流程——基于ThinkPHP3.2的内容管理框架OneThink学习
    版权控制之zend guard 6.0使用教程
    IP进制站群原理
    多线程更新已排序的Datagridview数据,造成数据错位
    压缩html 减小存储空间
    DataGridView导入导出excel
    软件下载目录
    java反射
    JTA
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/4854827.html
Copyright © 2011-2022 走看看