前端搞算法再也不难,如何套路解题:滑动窗口类

前言

这不是一个给一道题目然后告诉你题解的系列,而是对于一系列题目进行分类,找出他们解题规律并得出大致框架代码的文章。吃透解一系列题目的规律比会解单个题目有用得多,毕竟你总会遇到没刷过的题。

正文

大家对于滑动窗口应该不陌生,在 TCP 协议中就有这个概念的出现,用于控制网络流量,避免拥塞发生。

在算法中这个思想也是类似的,多用于解决在一段连续的区间中寻找满足条件的问题,比如说给定一个字符串,寻找出无重复字符的最长子串。该思路主要应用于数组及字符串的数据结构中。

示例

前端搞算法再也不难,如何套路解题:滑动窗口类

 

滑动窗口主要思路是维护一对指针,在一定条件内右移右指针扩大窗口大小直到窗口内的解不满足题意,此时我们需要根据情况移动左指针,重复移动左右指针的操作并在区间内求解,直到双指针不能再移动。

以 寻找出无重复字符的最长子串 题目为例,根据上述的思路解题就会很方便:

var lengthOfLongestSubstring = function(s) {
    // 用于存储指针移动过程中的值
    let map = {}
    // 双指针
    let left = 0
    let right = 0
    // 结果
    let count = 0
    // 指针移动终止条件
    while (right < s.length) {
        const char = s[right]
        // 根据题意我们需要寻找不重复的最长子串
    
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值