滑动窗口认识
滑动窗口多用于解决一段连续的区间中寻找满足条件的问题,比如说给定一个字符串,寻找无重复字符的最长字串。该思路主要用于数组及字符串的数据结构中。
滑动窗口主要思路是维护一对指针,在一定条件内右移右指针扩大窗口大小直到窗口内的解不满足题意,此时我们需要根据情况移动左指针,重复移动左右指针的操作并在区间内求解,直到双指针不能再移动
大体结构如下
1 | let left = 0, right = 0; |
框架中需要变化的几点如下:
- 右指针右移后数据的更新
- 判断窗口何时需要缩小
- 左指针右移后数据的更新
- 根据题意求解
练习
#LeetCode 03 无重复字符的最长子串
1 | var lengthOfLongestSubstring = function(s) { |
#LeetCode 209 长度最小的子数组
1 | var minSubArrayLen = function(target, nums) { |
#LeetCode 438. 找到字符串中所有字母异位词
例如:s=”cbaebabacd”, p = “abc” –> 输出: [0,6]
1 | var findAnagrams = function(s, p) { |
#LeetCode 76. 最小覆盖子串
1 | var minWindow = function(s, t) { |