字符串最长字串长度

双指针滑动窗口,
1.首先左指针指向最左边第一个元素,
2.右指针查找子串,使用set来保存子串,当字串遇到相同元素时候,退出。
3.计算左指针 与 右指针的距离 获取当前子串的长度值
4.删除字串中第一个元素,直到 右指针 匹配字串里面没有重复值,也就是上一次的子串,需要完全不存在当前右指针指向的值与之重复。

var lengthOfLongestSubstring = function(s) {
    var left = 0, right =0;
    var max = 0;
    var n = s.length;
    var setMap = new Set()
    for(;left<n;left++){
        //持续移除窗口 ,直到建立一个新的窗口
        if(left>0){
            setMap.delete(s[left-1])
        }

        //右指针持续向右移动,查找子串并把字串插入set, 直到遇到字串里相同元素退出
        while(right < n && !setMap.has(s[right])){
            setMap.add(s[right])
            right++
        }
        //右指针找到了字串相同的元素退出,此时要获取当前字串的最大值
        max = Math.max(max,right - left)
    }
    return max 
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值