HOT100——无重复字符的最长子串(JS实现)

简介: HOT100——无重复字符的最长子串(JS实现)

题目描述

image.png

解题思路

  • 本题采用双指针 + 哈希表的方式解决问题。
  • 最大值是通过不断更新出来的。
  • 右指针移动到字符串的最后一个元素循环结束。
  • 循环体中首先判断右指针指向的元素是否出现在哈希表中,如果出现了,对应的值+1,反之赋值为1.
  • 哈希表存在的意义就是为了辅助我们的左指针的移动,当右指针的元素出现的次数大于2,此时说明重复了,我们要不断移动左指针,直到右指针重复的这个元素不重复为止,移动左指针之前还要将左指针指向的这个元素的哈希值-1,防止后面出现了同样的元素
  • 最后右指针右移,然后不断比较res和right - left的较大值赋给res。

解题代码

var lengthOfLongestSubstring = function(s) {
    // 本题采用滑动窗口 + 双指针的方法
    // 定义左指针
    let left = 0;
    // 定义右指针
    let right = 0;
    // 定义最大值
    let res = 0;
    // 定义滑动窗口(哈希表)
    let window = new Map();
    // 循环结束条件是 右指针走到了最右边
    while (right < s.length) {
        // 判断右指针指向的元素,是否在哈希表中,在则+1,不在则添加进去
        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,然后左指针右移
            // 之所以 -1 之后再右移,根本原因在于防止左边的元素重复出现
            window.set(s[left],window.get(s[left]) -1);
            left++;
        }
        // 指针右移,不断更新最大值
        right++;
        res = Math.max(res,right - left);
    }
    return res;
};
复制代码

参考链接

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

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

  • 学会通过不断更新的方式获取最大值。
  • 学会通过哈希表 + 双指针的方式来解决问题。


相关文章
|
2月前
|
前端开发 JavaScript 安全
前端JS实现密码校验键盘横竖、26字母、相同字母、相同数字、密码包含用户名、数字 字母不能连续 不能相同三个、不能横向 竖向 连续三个 包含字符、不能有中文符号
该 JavaScript 代码实现了一个严格的密码校验功能,确保密码满足多种安全要求,包括长度、字符类型、不包含中文及特殊字符、不与用户名相似等。通过多个辅助函数,如 `validateFormat` 检查密码格式,`isHasChinaCharFun` 检测中文符号,`getCharAll` 生成键盘组合,以及 `checkPasswordFun` 综合验证密码的有效性和安全性。此工具对于提高用户账户的安全性非常有用。
71 0
用html+javascript打造公文一键排版系统14:为半角和全角字符相互转换功能增加英文字母、阿拉伯数字、标点符号、空格选项
用html+javascript打造公文一键排版系统14:为半角和全角字符相互转换功能增加英文字母、阿拉伯数字、标点符号、空格选项
|
3月前
|
存储 文字识别 前端开发
用html+javascript打造公文一键排版系统13:增加半角字符和全角字符的相互转换功能
用html+javascript打造公文一键排版系统13:增加半角字符和全角字符的相互转换功能
|
3月前
|
JavaScript 前端开发 安全
JavaScript编程实现字符和字符串翻转
JavaScript编程实现字符和字符串翻转
|
5月前
|
JavaScript
js 判断字符串是否包含中文,判断字符串是否全是中文,判断字符是否为中文
js 判断字符串是否包含中文,判断字符串是否全是中文,判断字符是否为中文
262 0
|
6月前
|
JavaScript 前端开发
JS中判断一个字符串中出现次数最多的字符,统计这个次数?
JS中判断一个字符串中出现次数最多的字符,统计这个次数?
48 0
|
7月前
|
前端开发 JavaScript 数据安全/隐私保护
前端 JS 经典:零宽字符
前端 JS 经典:零宽字符
143 0
|
JavaScript
Js判断是否包含特殊字符的方法
Js判断是否包含特殊字符的方法
213 0
|
JavaScript 前端开发
js判断一个字符出现最多的次数
js判断一个字符出现最多的次数
110 0
|
7月前
|
JavaScript 小程序
JS控制input输入特殊字符
JS控制input输入特殊字符
100 0