实时文本显示器
题目描述只有一个词“Window”,信息不足,无法唯一确定是 LeetCode 的哪一道题(常见与“Window”相关的题有:
- 3. Longest Substring Without Repeating Characters(滑动窗口)
- 76. Minimum Window Substring(最小覆盖子串)
- 239. Sliding Window Maximum(滑动窗口最大值)
- 438. Find All Anagrams in a String(窗口找异位词)
等等。
请你把完整题面/链接/题号贴出来,我就能按要求写“完整 Python 解法 + 每行中文注释”。
在你补充之前,我先给出最常见的“Window”题之一:**76. Minimum Window Substring(最小覆盖子串)** 的标准解法(滑动窗口)。如果不是这题,你回复题号我再改。
```python
class Solution(object):
def minWindow(self, s, t):
"""
:type s: str
:type t: str
:rtype: str
"""
# 如果 t 为空,按照题意一般返回空串
if not t:
return ""
# 用字典统计 t 中每个字符需要的数量
need = {}
for ch in t:
# need.get(ch, 0) 表示如果不存在则默认 0
need[ch] = need.get(ch, 0) + 1
# 记录还需要满足多少种字符(按“种类”计数,而不是按总字符数)
missing_types = len(need)
# 滑动窗口左指针
left = 0
# 记录当前找到的最优答案区间长度与起点
best_len = float('inf')
best_l = 0
# 遍历右指针扩张窗口
for right in range(len(s)):
# 当前加入窗口的字符
c = s[right]
# 如果该字符是我们需要的,减少需求计数
if c in need:
need[c] -= 1
# 当某个字符需求刚好被满足(从 1 变 0),说明满足了一种字符
if need[c] == 0:
missing_types -= 1
# 当窗口已满足 t 的所有字符需求,尝试收缩左边界
while missing_types == 0:
# 更新最优答案
window_len = right - left + 1
if window_len < best_len:
best_len = window_len
best_l = left
# 准备移出窗口的左侧字符
d = s[left]
# 左指针右移,收缩窗口
left += 1
# 如果移出的字符是需要的字符,需要恢复计数
if d in need:
need[d] += 1
# 如果恢复后从 0 变成 1,说明窗口不再满足该字符需求
if need[d] == 1:
missing_types += 1
# 如果 best_len 没有更新过,说明无解
if best_len == float('inf'):
return ""
# 返回最小覆盖子串
return s[best_l:best_l + best_len]
```
你确认一下:你说的“Window”是不是 **最小覆盖子串**(Minimum Window Substring)?
如果不是,请发:**题号** 或 **完整题面(输入输出/示例/约束)**,我会按同样要求(模板 + 每行中文注释)重新写对应题目的完整解法。
[LOG] SEND
[LOG] SAVE