美文网首页
[LeetCode]76、最小覆盖子串

[LeetCode]76、最小覆盖子串

作者: 河海中最菜 | 来源:发表于2019-08-04 22:39 被阅读0次

题目描述

给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。

示例:

输入: S = "ADOBECODEBANC", T = "ABC"
输出: "BANC"
说明:

如果 S 中不存这样的子串,则返回空字符串 ""。
如果 S 中存在这样的子串,我们保证它是唯一的答案

思路解析

首先,检查T中的字母统计个数
设置一个字典更新S中的字母情况,当满足要求的时候,检查,是否是最小,若是则更新。不是就将start += 1,直到不满足要求,end开始继续遍历

class Solution:
    def minWindow(self, s: 'str', t: 'str') -> 'str':
        from collections import Counter
        t = Counter(t)
        lookup = Counter()
        start = 0
        end = 0
        min_len = float("inf")
        res = ""
        while end < len(s):
            lookup[s[end]] += 1
            end += 1
            #print(start, end)
            while all(map(lambda x: lookup[x] >= t[x], t.keys())):
                if end - start < min_len:
                    res = s[start:end]
                    min_len = end - start
                lookup[s[start]] -= 1
                start += 1
        return res
AC76

相关文章

网友评论

      本文标题:[LeetCode]76、最小覆盖子串

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