剑指Offer——最长不含重复字符的子字符串(JS实现)

简介: 剑指Offer——最长不含重复字符的子字符串(JS实现)

题目描述

image.png

解题思路

  • 本题采用哈希表 + 滑动窗口的思路
  • 哈希表用来存储每个字符出现的次数,当单个字符出现2次的时候,用以辅助我们移动滑动窗口
  • 首先定义一个左右指针,左指针和右指针初始时指向0,右指针不断右移作为判断循环的条件,当右指针移动到字符串长度的位置时,结束循环。
  • 具体过程看注释,注释很详细

解题代码(模拟队列)

var lengthOfLongestSubstring = function (s) {
    // !本题采用滑动窗口 + 哈希表的方法解决
    // 定义滑动窗口,这个滑动窗口是一个哈希表,哈希表的键:单个字符 值:该字符出现的次数
    const window = new Map();
    // 定义左指针
    let left = 0;
    // 定义右指针
    let right = 0;
    // 定义不重复子串的最大长度
    let res = 0;
    // 右指针小于字符串的长度的时候,是进入循环的条件
    while (right < s.length) {
        // 因为我们移动的是右指针,所以要先判断哈希表中是否含有右指针指向的元素
        if (window.has(s[right])) {
            window.set(s[right],window.get(s[right]) + 1);
        } else {
            window.set(s[right],1);
        }
        // 判断右指针指向的元素是否出现重复
        while (window.get(s[right]) > 1) {
            // 左指针指向的元素出现的次数-1,然后左指针右移,直到出现重复的那个元素不再重复
            window.set(s[left],window.get(s[left]) - 1);
            left++;
        }
        right++;
        res = Math.max(res,right - left);
    }
    return res;
};

总结(本题给我们的启示思路)

  • 启示一:学会使用滑动窗口 + 哈希表
  • 启示二:学会使用双指针
  • 启示三:学会通过更新的方式获取到最大值
相关文章
|
2月前
|
JavaScript 前端开发
JS几种拼接字符串的方法
JS几种拼接字符串的方法
53 1
|
3月前
|
JavaScript
js 解析 byte数组 成字符串
js 解析 byte数组 成字符串
90 5
|
1月前
|
JavaScript 前端开发 数据处理
模板字符串和普通字符串在浏览器和 Node.js 中的性能表现是否一致?
综上所述,模板字符串和普通字符串在浏览器和 Node.js 中的性能表现既有相似之处,也有不同之处。在实际应用中,需要根据具体的场景和性能需求来选择使用哪种字符串处理方式,以达到最佳的性能和开发效率。
|
28天前
|
JavaScript 前端开发 索引
JavaScript学习第二章--字符串
本文介绍了JavaScript中的字符串处理,包括普通字符串和模板字符串的使用方法及常见字符串操作方法如`charAt`、`concat`、`endsWith`等,适合前端学习者参考。作者是一位热爱前端技术的大一学生,专注于分享实用的编程技巧。
23 2
|
3月前
|
存储 JSON JavaScript
「offer来了」保姆级巩固你的js知识体系(4.0w字)
该文章提供了JavaScript知识体系的全面复习资料,覆盖了从基础语法到高级特性如闭包、原型链、异步编程等多个方面,并通过大量的面试题和实例代码帮助巩固理解。
「offer来了」保姆级巩固你的js知识体系(4.0w字)
|
2月前
|
存储 JavaScript 前端开发
JavaScript 字符串(String) 对象
JavaScript 字符串(String) 对象
47 3
|
3月前
|
JavaScript 前端开发
javascript创建字符串
javascript创建字符串
|
3月前
|
JavaScript 前端开发
如何在JavaScript中替换字符串:一篇详细指南
如何在JavaScript中替换字符串:一篇详细指南
|
2月前
|
前端开发 JavaScript 安全
前端JS实现密码校验键盘横竖、26字母、相同字母、相同数字、密码包含用户名、数字 字母不能连续 不能相同三个、不能横向 竖向 连续三个 包含字符、不能有中文符号
该 JavaScript 代码实现了一个严格的密码校验功能,确保密码满足多种安全要求,包括长度、字符类型、不包含中文及特殊字符、不与用户名相似等。通过多个辅助函数,如 `validateFormat` 检查密码格式,`isHasChinaCharFun` 检测中文符号,`getCharAll` 生成键盘组合,以及 `checkPasswordFun` 综合验证密码的有效性和安全性。此工具对于提高用户账户的安全性非常有用。
71 0
|
3月前
|
存储 JavaScript
js切割截取字符串方法
js切割截取字符串方法
58 2