滑动窗口模板
滑动窗口算法的通用模板,适用于子串、子数组等连续区间的最值/计数问题。
#type / howto
#status / stub
#resource / algorithm
#algo / sliding-window
[!info] related notes
滑动窗口模板
适用场景
- 连续子数组/子串问题
- 求最值、计数、满足条件的区间
通用模板
def sliding_window(s):
left = 0
window = {} # or other data structure
result = 0
for right in range(len(s)):
# 1. 扩大窗口
window[s[right]] = window.get(s[right], 0) + 1
# 2. 收缩窗口(当不满足条件时)
while not_valid(window):
window[s[left]] -= 1
left += 1
# 3. 更新结果
result = max(result, right - left + 1)
return result
变体
- 定长窗口:窗口大小固定,用
right - left + 1 == k判断 - 不定长窗口:用 while 循环动态收缩
- 双指针变体:左右指针同时移动