【数组 &双指针】Leecode-76. 最小覆盖子串

举报
子都爱学习 发表于 2023/10/16 22:22:06 2023/10/16
【摘要】 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 注意:对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。如果 s 中存在这样的子串,我们保证它是唯一的答案。示例 1:输入:s = "ADOBECODEBANC", t = "ABC"输出:"BANC"解释:最...

【题目】

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

 注意:

对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。

如果 s 中存在这样的子串,我们保证它是唯一的答案。

示例 1:

输入:s = "ADOBECODEBANC", t = "ABC"
输出:"BANC"
解释:最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'。

示例 2:

输入:s = "a", t = "a"
输出:"a"
解释:整个字符串 s 是最小覆盖子串。

示例 3:

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

【题解】

题解1:

  • 思路

         滑动窗口

  • 复杂度

         时间复杂度:O(n2),空间复杂度:O(1)

  • 代码
class Solution:
    def minWindow(self, s: str, t: str) -> str:
        t_n = len(t)
        s_n = len(s)
        if s_n < t_n:
            return ''
        res = ''
        new_i = 0
        counter_t = collections.Counter(t)
        for i in range(s_n - t_n + 1):
            if new_i > i:
                continue
            j = i + t_n
            while j <= s_n:
                temp = collections.Counter(s[i:j])
                for k, v in counter_t.items():
                    if k not in temp or v > temp[k]:
                        break
                else:
                    while True:
                        c = s[i]
                        if c in counter_t:
                            new_i = i
                            break
                        i += 1

                    if res == '' or len(res) > j - i:
                        res = s[i:j]
                    break
                j += 1
        return res
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。