Leetcode 3.无重复字符的最长子串 JavaScript (Day 4)

js一刷法一(布尔集合)

javascript 复制代码
var lengthOfLongestSubstring = function (s) {
    let idx = new Set();
    let i = 0;
    let len = 0;

    for (let j = 0; j < s.length; j++) {


        while (idx.has(s[j])) {
            idx.delete(s[i]);
            i++;
        }

        idx.add(s[j]);
        len = Math.max(len, j - i + 1);
    }

    return len;
};

js一刷法二

javascript 复制代码
/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function (s) {
    let idx = new Map();
    let i = 0;
    let len = 0;

    for (let j = 0; j < s.length; j++) {


        while (idx.get(s[j])) {
            idx.set(s[i], idx.get(s[i]) - 1);
            i++;
        }

        idx.set(s[j], (idx.get(s[j]) ?? 0) + 1);
        len = Math.max(len, j - i + 1);
    }

    return len;
};

核心思想:滑动窗口
语法细节: (idx.get(s[j]) ?? 0),如果左边是false的话返回0,否则返回idx.get(s[j])

相关推荐
Wect19 小时前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱20 小时前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法
一拳不是超人1 天前
Electron主窗口弹框被WebContentView遮挡?独立WebContentView弹框方案详解!
前端·javascript·electron
wuhen_n1 天前
代码生成:从AST到render函数
前端·javascript·vue.js
Lee川1 天前
从异步迷雾到优雅流程:JavaScript异步编程与内存管理的现代化之旅
javascript·面试
wuhen_n1 天前
AST转换:静态提升与补丁标志
前端·javascript·vue.js
destinying1 天前
性能优化之实战指南:让你的 Vue 应⽤跑得飞起
前端·javascript·vue.js
晴殇i1 天前
揭秘JavaScript中那些“不冒泡”的DOM事件
前端·javascript·面试
BER_c1 天前
前端权限校验最佳实践:一个健壮的柯里化工具函数
前端·javascript
敲敲敲敲暴你脑袋1 天前
写个添加注释的vscode插件
javascript·typescript·visual studio code