zoukankan      html  css  js  c++  java
  • leetcode76. Minimum Window Substring

    leetcode76. Minimum Window Substring

    题意:

    给定字符串S和字符串T,找到S中的最小窗口,其中将包含复杂度O(n)中T中的所有字符。

    例如,
    S =“ADOBECODEBANC”
    T =“ABC”
    最小窗口为“BANC”。

    注意:
    如果S中没有覆盖T中所有字符的窗口,返回空字符串“”。

    如果有多个这样的窗口,您可以确保在S中始终只有一个唯一的最小窗口。

    思路:

    一个right指针遍历s,每次遇到t中的字符,在map中减少一个,同时用一个count做统计,当t中所有字符被遍历的时候,做一次统计,并且将left指针移动,直到count != t.length() ,相当于一个窗口在s字符串上配合map表动态滑动。

    ac代码:

    C++

    class Solution {
    public:
        string minWindow(string s, string t) {
            int map[256] = {0};
            bool hash[256] = {false};
            int slen = s.length();
            int tlen = t.length();
            if(!slen || !tlen) return "";
            int left,right,res,cnt,minleft;
            minleft = cnt = left = right = 0;
            res = slen + 1;
            for(char ch:t)
            {  
                map[ch]++;
                hash[ch] = true;
            }
            
            while(right < slen)
            {
                if(hash[s[right++]] && --map[s[right - 1]] >= 0) 
                    cnt++;
                
                while(cnt == tlen)
                {
                    if(right - left < res)
                    {
                        res = right - left;
                        minleft = left;
                    }
                    
                    if(hash[s[left++]] && ++map[s[left - 1]] > 0 )
                    {
                        cnt--;
                    }
                }
            }
            if(res > slen) return "";
            return s.substr(minleft, res);
            
        }
    };
    

    python

    
    
  • 相关阅读:
    如何获取地址栏中的参数
    Ajax基础知识
    什么是BFC
    111
    不定宽 块状元素居中3
    POJ 2104主席树
    可持久化数据结构之主席树
    线段树
    Splay 学习
    hello world
  • 原文地址:https://www.cnblogs.com/weedboy/p/7219774.html
Copyright © 2011-2022 走看看