Python描述 LeetCode 76. 最小覆盖子串

Posted 亓官劼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python描述 LeetCode 76. 最小覆盖子串相关的知识,希望对你有一定的参考价值。

Python描述 LeetCode 76. 最小覆盖子串

  大家好,我是亓官劼(qí guān jié ),在【亓官劼】公众号、CSDN、GitHub、B站等平台分享一些技术博文,主要包括前端开发、python后端开发、小程序开发、数据结构与算法、docker、Linux常用运维、NLP等相关技术博文,时光荏苒,未来可期,加油~

  如果喜欢博主的文章可以关注博主的个人公众号【亓官劼】(qí guān jié),里面的文章更全更新更快。如果有需要找博主的话可以在公众号后台留言,我会尽快回复消息.


本文原创为【亓官劼】(qí guān jié ),请大家支持原创,部分平台一直在恶意盗取博主的文章!!! 全部文章请关注微信公众号【亓官劼】。

题目

给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 ""

注意:

  • 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。
  • 如果 s 中存在这样的子串,我们保证它是唯一的答案。

示例 1:

输入:s = "ADOBECODEBANC", t = "ABC"
输出:"BANC"

示例 2:

输入:s = "a", t = "a"
输出:"a"

示例 3:

输入: s = "a", t = "aa"
输出: ""
解释: t 中两个字符 'a' 均应包含在 s 的子串中,
因此没有符合条件的子字符串,返回空字符串。

提示:

  • 1 <= s.length, t.length <= 105
  • st 由英文字母组成

**进阶:**你能设计一个在 o(n) 时间内解决此问题的算法吗?

解题思路

双指针,O(n)

l,r分别表示当前区间的左右
r一直向右走,当第一次找到可以满足的序列时,停下。移动l,直到不满足条件位置,在l移动中更新满足的最短序列的起始位置

Python描述

class Solution:
    def minWindow(self, s: str, t: str) -> str:
        def is_ok(sd, td):
            for key, value in td.items():
                if sd.get(key, 0) < value:
                    return False
            return True

        n, m = len(s), len(t)
        if n < m:
            return ""
        td = 
        sd = 
        for i in range(m):
            td[t[i]] = td.get(t[i], 0) + 1
            sd[s[i]] = sd.get(s[i], 0) + 1
        start = end = 0
        if is_ok(sd, td):
            start, end = 0, m
        l, r = 0, m
        while r < n:
            sd[s[r]] = sd.get(s[r], 0) + 1
            while is_ok(sd, td):
                if end == 0 or r - l + 1 < end - start + 1:
                    start, end = l, r+1
                sd[s[l]] -= 1
                l += 1
            r += 1
        return s[start:end]

以上是关于Python描述 LeetCode 76. 最小覆盖子串的主要内容,如果未能解决你的问题,请参考以下文章

Python描述 LeetCode 76. 最小覆盖子串

[LeetCode in Python] 76 (H) minimum window substring 最小覆盖子串

5-106-(LeetCode- 76) 最小覆盖子串

[leetcode] 76. 最小覆盖子串

leetcode-76 最小覆盖子串

Leetcode 76.最小覆盖子串