欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > LeetCode | 滑动窗口的原理及真题解析

LeetCode | 滑动窗口的原理及真题解析

2025/10/24 14:37:31 来源:https://blog.csdn.net/weixin_44649780/article/details/148457126  浏览:    关键词:LeetCode | 滑动窗口的原理及真题解析

滑动窗口是一种双指针技术,用于处理数组或字符串中连续区间的问题。通过一个“窗口”在数组上从左到右滑动,寻找满足某个条件的子区间。

动态维护一个“窗口”,只包含一段区间的数据,在保持区间性质的同时:

  • 右指针右移扩大窗口

  • 左指针右移缩小窗口

  • 最终得到一个最优解(最大/最小长度,出现次数等)

1.滑动窗口的常见形式

类型描述示例题目
固定长度窗口窗口大小固定,左右指针同步滑动Leetcode 239
可变长度窗口窗口根据条件动态调整左边界Leetcode 3 / 76
滑动+统计/哈希频率统计窗口内字符频率或特征Leetcode 567 / 438

2.如何判断 Leetcode 题目是否适合用滑动窗口?

常见关键词:

  • “连续子串 / 子数组”

  • “最长/最短长度”

  • “包含多少种字符”

  • “所有满足条件的子串”

  • “在字符串中查找模式/异位词”

典型特征:

特征是否适合滑动窗口
子区间必须是连续的
问题与字符/元素频率有关
多次查询子区间信息
涉及所有子集/组合/不连续位置❌(更适合回溯或位运算)

Leetcode 高频滑动窗口题目

题号题目类型
3无重复字符的最长子串可变长度窗口
76最小覆盖子串可变长度 + 字符频率
567字符串的排列固定长度 + 频率对比
438找到字符串中所有字母异位词固定长度 + 滑动频率
239滑动窗口最大值固定窗口 + 单调队列
209长度最小的子数组可变窗口 + 滑动加和
30串联所有单词的子串固定窗口 + 哈希

【Leetcode 76】最小覆盖子串 Minimum Window Substring

 给你字符串 s 和字符串 t,返回包含 t 所有字符的最小子串。如果不存在,返回空字符串。

#最优解:滑动窗口 + 字符计数
from collections import Counterdef minWindow(s: str, t: str) -> str:if not s or not t:return ""need = Counter(t)window = {}have = 0need_count = len(need)left = 0res = ""res_len = float("inf")for right, c in enumerate(s):window[c] = window.get(c, 0) + 1if c in need and window[c] == need[c]:have += 1while have == need_count:# 更新最小窗口if (right - left + 1) < res_len:res = s[left:right+1]res_len = right - left + 1# 移动左边界,缩小窗口window[s[left]] -= 1if s[left] in need and window[s[left]] < need[s[left]]:have -= 1left += 1return res#时间复杂度:O(|S| + |T|)
#空间复杂度:O(|T|)

【Leetcode 639】Sliding Window Maximum

 给你一个整数数组 nums 和一个整数 k,在所有大小为 k 的滑动窗口中找出最大值。

# 最优解:单调队列
from collections import dequedef maxSlidingWindow(nums, k):q = deque()res = []for i in range(len(nums)):# 移除窗口外的索引if q and q[0] <= i - k:q.popleft()# 维持单调递减栈:移除小于当前值的元素while q and nums[q[-1]] < nums[i]:q.pop()q.append(i)# 从第 k 个位置开始记录结果if i >= k - 1:res.append(nums[q[0]])return res#时间复杂度:O(n)
#空间复杂度:O(k)(最多存 k 个索引)

想要了解更多内容,可在VX小程序搜索🔍AI Pulse,获取更多最新内容。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词