外观
一句话答案
滑动窗口解决子串/子数组问题:右指针扩张维护窗口状态,不满足条件时左指针收缩,适合最长/最短子串类题。
核心要点
模板: left=0, 遍历right扩张窗口 → while(需收缩) left++ → 更新答案
适用场景: 最小覆盖子串 / 无重复最长子串 / 固定窗口最大和 / 最多K个不同字符
追问与易错
追问方向:
- 固定窗口和可变窗口的区别?
- 窗口收缩条件怎么确定?
- 什么题型适合滑动窗口?
易错点:
- ❌ 滑动窗口能解决所有子串问题——有些需要 DP
- ❌ 窗口一定是连续的——是的子数组/子串都是连续的
💡 记忆锚点
滑动窗口像伸缩尺蠖:右指针不停往右爬(扩张窗口),窗口不满足条件时左指针跟上来(收缩窗口),每次更新答案。模板三步:右扩→判断是否需要左缩→更新最优解。求最长子串时在窗口合法时更新答案,求最短子串时在窗口刚满足条件时更新答案。O(n)双指针,把暴力O(n2)降一维。