滑动窗口模板

滑动窗口算法的通用模板,适用于子串、子数组等连续区间的最值/计数问题。

#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 循环动态收缩
  • 双指针变体:左右指针同时移动
创建于 2026/7/4 更新于 2026/7/15