题解 | #最长无重复子数组#

最长无重复子数组

https://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4

okkjoo-leetcodeHot-byJs带你用 JS 刷高频面试算法题~还有各种常用、常考手写, 最近还加了自己实现的流行库的mini版本合集仓库:okkjoo-leetcodeHot-byJs欢迎 star⭐

解题思路

无重复+最长子串——看到这两个个关键字你就要想到滑动窗口,那么这道题就是窗口大小无限制的滑动窗口~ 滑动窗口具体控制就是双指针啦

然后需要求得的就是 满足条件(不含重复字符)的窗口中,最大的窗口。

  • 用一个 set 存储窗口内的元素
  • 当窗口内没有重复字符时就不断地向右边扩张新的右边界字符存入 set
  • 出现重复后就缩小左边的窗口左边界限向右移动
  • 直到最右边界限

代码

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
    const set = new Set();//记录窗口内元素是否出现过
    let i = 0, j = 0, res = 0;//左右指针、答案
    if(s.length == 0)return 0;//特殊情况
    while(j < s.length){//右边界小于字符串长度
        if(!set.has(s[j])){//set中没有
            set.add(s[j]);//放入set中
            res = Math.max(res, set.size);//看看答案要不要更新
        }else{//set中已经有了
            while(set.has(s[j])){//右移左边界直到没有重复字符
                set.delete(s[i]);
                i++;
            }
            set.add(s[j]);//将右边界字符加入
        }
        j++;//无论如何右边界都是一直走的
    }
    return res
};


okkjoo-leetcodeHot-byJs带你用 JS 刷高频面试算法题~还有各种常用、常考手写, 最近还加了自己实现的流行库的mini版本合集仓库:okkjoo-leetcodeHot-byJs欢迎 star⭐

前端校招刷题准备-题解合集 文章被收录于专栏

力扣刷了一遍,再到这里适应一下做题环境+复习

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务