Skip to main content
滑动窗口是一种常用的双指针技巧,适用于处理数组/字符串的子元素问题。通过维护一个窗口在数组上滑动,可以在O(n)时间复杂度内解决问题。

基本思路

  1. 使用两个指针left和right表示窗口的左右边界
  2. right指针不断右移扩大窗口
  3. 当窗口满足某个条件时,left指针右移缩小窗口
  4. 在移动过程中更新结果

模板代码

经典题目

1. LeetCode 3. 无重复字符的最长子串

2. LeetCode 76. 最小覆盖子串

3. LeetCode 438. 找到字符串中所有字母异位词

4. LeetCode 209. 长度最小的子数组

5. LeetCode 567. 字符串的排列

适用场景

  • 求连续子数组/子串的最值
  • 字符串匹配问题
  • 固定长度窗口的问题
  • 满足某个条件的最长/最短子数组

时间复杂度

虽然有两层循环,但每个元素最多被访问两次(一次right,一次left),所以时间复杂度为O(n)。
最后修改于 2026年8月31日