Loading

[Python手撕]最小覆盖子串(滑动窗口)

class Solution:
    def minWindow(self, s: str, t: str) -> str:

        def judge(map_p, map_q):
            for key, value in map_q.items():
                if map_p.get(key, 0) < value:
                    return False
            return True

        n = len(s)
        m = len(t)

        map_t = {}
        for c in t:
            map_t[c] = map_t.get(c, 0) + 1

        map_s = {}

        min_len = float("inf")

        left = 0
        res_left = -1
        res_right = -1
        for right in range(n):
            map_s[s[right]] = map_s.get(s[right], 0) + 1
            while right - left + 1 >= m and judge(map_s, map_t):
                if right - left + 1 < min_len:
                    min_len = right - left + 1
                    res_left = left
                    res_right = right
                map_s[s[left]] = map_s.get(s[left], 0) - 1
                left += 1

        if min_len == float("inf"):
            return ""
        else:
            return s[res_left : res_right + 1]

posted @   Duancf  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示