1 思想
在力扣上刷题时经常可以看到这样的题,求XXX的子串、子数组、子序列等等,这类题一般使用滑动窗口来解决。本篇文章的思路学习了bilibili的up主红桃A士。
情况一:寻找最长的
①初始化左右指针left和right,左右指针之间的内容就是窗口,定义一个变量result记录当前的滑动窗口的结果,定义一个变量bestResult记录当前滑动窗口下的最优结果
②right要向右逐位滑动循环
③每次滑动后,记录当前滑动的结果。如果当前的结果符合条件,则更新最优的结果,然后right要继续向右滑动;如果当前的结果不符合条件,那么要让left逐步收缩
④当right到达结尾时停止滑动
初始化left,right,result,bestResult
while (右指针没有到结尾) {
窗口扩大,加入right对应元素,更新当前result
while (result不满足要求) {
窗口缩小,移除left对应元素,left右移
}
更新最优结果bestResult
right++;
}
返回bestResult
情况二:寻找最短的
①初始化左右指针left和right,左右指针之间的内容就是窗口,定义一个变量result记录当前的滑动窗口的结果,定义一个变量bestResult记录当前滑动窗口下的最优结果
②right要向右逐位滑动循环
③每次滑动后,记录当前滑动的结果。如果当前的结果符合条件,则更新最优的结果,然后right要继续向右滑动;如果当前的结果不符合条件,那么要让left逐步收缩
④当right到达结尾时停止滑动
初始化left,right,result,bestResult
while (右指针没有到结尾) {
窗口扩大,加入right对应元素,更新当前result
while (result不满足要求) {
更新最优结果bestResult
窗口缩小,移除left对应元素,left右移
}
right++;
}
返回bestResult
2 代码
下面以力扣的两道题来说明两种情况。
1、寻找最长的
力扣3. 无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。
示例 1:
输入: s = “abcabcbb”
输出: 3

本文详细介绍了滑动窗口算法的两种应用场景:寻找最长的无重复字符子串和寻找和大于目标值的最短子数组。通过具体的LeetCode题目解析,展示了如何运用滑动窗口思想解决实际问题。文章提供了清晰的解题思路和JavaScript实现代码,帮助读者深入理解滑动窗口算法。
最低0.47元/天 解锁文章
1219

被折叠的 条评论
为什么被折叠?



