剑指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;
};

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

  • 启示一:学会使用滑动窗口 + 哈希表
  • 启示二:学会使用双指针
  • 启示三:学会通过更新的方式获取到最大值
相关文章
|
1月前
|
JavaScript 前端开发
JavaScript随手笔记 --- 用正则表达式匹配字符串是否为运算公式
JavaScript随手笔记 --- 用正则表达式匹配字符串是否为运算公式
|
1月前
|
JavaScript 前端开发
js字符串替换
js字符串替换
16 2
|
3月前
|
JavaScript 前端开发
javascript 如何判断字符串日期是否相差七天
在JavaScript中,你可以使用`Date`对象来比较两个日期之间的差异。下面是一个简单的示例,演示如何判断两个字符串日期是否相差七天: ```javascript function isSevenDaysDifference(date1, date2) { // 确保输入是字符串 if (typeof date1 !== 'string' || typeof date2 !== 'string') { return false; } // 将字符串转换为Date对象 var d1 = new Date(date1);
|
3月前
|
JavaScript 数据安全/隐私保护 Android开发
Js随机生成字符串---autojs pro 篇
Js随机生成字符串---autojs pro 篇
26 0
|
12天前
|
JavaScript 前端开发 索引
JavaScript中与字符串相关的方法
JavaScript中与字符串相关的方法
|
1月前
|
JavaScript 前端开发 索引
JavaScript字符串检查:从基础到高级
【2月更文挑战第26天】
24 0
JavaScript字符串检查:从基础到高级
|
5天前
|
JavaScript 前端开发
js字符串拼接
js字符串拼接
|
12天前
|
JavaScript
js 字符串String转对象Object
该代码示例展示了如何将一个以逗号分隔的字符串(`&#39;1.2,2,3,4,5&#39;`)转换为对象数组。通过使用`split(&#39;,&#39;)`分割字符串并`map(parseFloat)`处理每个元素,将字符串转换成浮点数数组,最终得到一个对象数组,其类型为`object`。
|
16天前
|
JavaScript
JS去除字符串的方法
JS去除字符串的方法