LC 速查

HOT 100索引 › B4 子串 Substring

LC 76最小覆盖子串Minimum Window Substring 困难

在 s 中找出包含 t 全部字符(含重复次数)的最短子串。

思路 欠账表 + 滑动窗口:missing 记录还缺的字符数,覆盖后移动左端收缩并更新最短答案。时间 O(n)。

class Solution:
    def minWindow(self, s: str, t: str) -> str:
        need = Counter(t)
        missing = len(t)
        l = best_l = 0
        best_len = len(s) + 1
        for r, c in enumerate(s):
            if need[c] > 0:
                missing -= 1
            need[c] -= 1
            if missing:  # 还没覆盖 t
                continue
            while need[s[l]] < 0:  # 左端多余字符
                need[s[l]] += 1
                l += 1
            if r - l + 1 < best_len:
                best_len = r - l + 1
                best_l = l
        if best_len > len(s):
            return ''
        return s[best_l:best_l + best_len]
← 上一题 滑动窗口最大值最大子数组和 下一题 →