【美团面试2024/05/14】前端面试题滑动窗口

一、题目描述

设有一字符串序列 s,确定该序列中最长的无重复字母的子序列,并返回其长度。

备注

0 <= s.length <= 5 * 104

s 由英文字母、数字、符号和空格组成

示例1

输入

s = "abcabcbb"

输出

3

二、原题链接

这道题在LeetCode上的原题链接:LCR 016. 无重复字符的最长子串

三、解题思路

使用滑动窗口来解决这道题,可以直接看下面代码中的注释进行理解就好,以下代码展示有详细的注释,一定要弄懂,这个题不难,最好是自己画一个图理解一下,这里不好讲解,后续可能会在哔站出一个讲解的视频,可以持续关注一下!

四、JS代码展示

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
    // 使用滑动窗口来解决这题
    let left = 0;  // 左指针的位置,初始值为0。
    let res = 0;  // 记录最长无重复子序列的长度,初始值为0
    let set = new Set();  // 一个集合,用来存储当前窗口内的字符
    for(let right=0; right<s.length; right++){
        // 如果集合中已经存在当前字符,移动左指针并删除左指针指向的字符,直到集合中不包含当前字符
        while(set.has(s[right])){
            set.delete(s[left]);
            left++;
        }
        // 将当前字符加入集合
        set.add(s[right]);
        // 更新最大长度
        res = Math.max(res,right-left+1);
    }
    return res;
};

如果以上内容对你有帮助,请点赞收藏吧❥(^_-),喜欢作者也可以加关注,后续会一直更新有关前端面试题的分享!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值