用于解决数组连续元素、字符串子串等问题。
滑动窗口对应left、right两个指针,指针中间区域成为窗口
窗口无非是两种操作:扩大或缩小。关键是何时缩小窗口
最小覆盖子串
- 首先定义左右两个编辑指针,通常都是用作闭右开:[left, right)
- 定义服务函数,判断窗口满足条件
- 扩大窗口,直到窗口满足条件
- 缩小窗口,直到窗口不满足条件,记录窗口位置
- 选择窗口最小的一个作为结果返回
```python
def test(window, need):
if len(window) < len(need):
for c, n in need.items():return False
return Trueif window.get(c, 0) < n:return False
def minimum_substring(s, t): window = defaultdict(int) need = defaultdict(int) for c in t: need[c] += 1
left, right = 0, 0result = []# 扩大窗口while right < len(s):c = s[right]right += 1window[c] += 1if test(window, need):# 开始收缩窗口while left < right:c = s[left]left += 1window[c] -= 1if !test(window, need):result.append(right-left + 1, left -1, right)breakif not result:return ''_, left, right = min(result)return s[left:right]
```

