码迷,mamicode.com
首页 > 编程语言 > 详细

LeetCode in Python 76. Minimum Window Substring

时间:2019-08-01 14:31:11      阅读:76      评论:0      收藏:0      [点我收藏+]

标签:solution   hat   input   deb   empty   ret   contain   ini   out   

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).

Example:

Input: S = "ADOBECODEBANC", T = "ABC"
Output: "BANC"
Note:

If there is no such window in S that covers all characters in T, return the empty string "".
If there is such window, you are guaranteed that there will always be only one unique minimum window in S.

滑动窗口算法可解,用vector代替哈希表获得更快的速度,遍历s串时相应增加cnt,找到符合要求的window后开始缩小左边界,cnt不符合要求时扩大右边界。关键点是要先找到符合要求的window。

class Solution {
public:
    string minWindow(string s, string t) {
        vector<int> stats(128, 0);
        int cnt = 0, left = 0, minLen = INT_MAX;
        string res = "";
        for (char c : t) stats[c]++;
        for (int i = 0; i < s.size(); i++) {
            if (--stats[s[i]] >= 0) cnt++;
        
            while (cnt == t.size()) {
                //找到符合要求的window后再缩小左边界
                if (i - left + 1 < minLen) {
                    minLen = i - left + 1;
                    res = s.substr(left, minLen);
                }
                if (++stats[s[left]] > 0) cnt--;
                left++;
            }
        }
        return res;
    }
};

LeetCode in Python 76. Minimum Window Substring

标签:solution   hat   input   deb   empty   ret   contain   ini   out   

原文地址:https://www.cnblogs.com/lowkeysingsing/p/11282130.html

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