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]