二刷--无重复字符的最长子串

简介: 二刷--无重复字符的最长子串

题目描述

image.png

解题思路

本题主要采用滑动窗口结合哈希表的思想,涉及到滑动窗口就必然涉及到左右指针,当右指针遍历到某一个元素的时候,我们首先判断哈希表中是否有该元素,无论有无,我们都首先记录下这个元素出现的次数,然后使用while循环,判断右指针指向的元素如果出现重复的情况,则更新左指针,最后更新极值。

AC代码

var lengthOfLongestSubstring = function (s) {
  // 定义左指针
  let left = 0;
  // 定义右指针
  let right = 0;
  // 定义哈希表窗口
  let window = new Map();
  // 定义最终返回的最大值
  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) {
      // 左指针对应的数量减一之后再让左指针右移
      window.set(s[left], window.get(s[left]) - 1);
      left++;
    }
    right++;
    res = Math.max(res, right - left);
  }
  return res;
};
复制代码

题目反思

  • 学会使用哈希表作为滑动窗口的载体。
  • 只要是涉及到窗口的长度,一定要考虑到左右指针之间的关系。
相关文章
|
8月前
|
索引
LeetCode3-无重复字符的最长子串
LeetCode3-无重复字符的最长子串
|
3月前
|
存储 算法 Go
LeetCode 第三题: 无重复字符的最长子串
  给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。
|
4月前
leetcode:3. 无重复字符的最长子串
leetcode:3. 无重复字符的最长子串
16 0
|
4月前
leetcode-3:无重复字符的最长子串
leetcode-3:无重复字符的最长子串
20 0
|
4月前
|
存储 算法 JavaScript
Leetcode算法系列| 3. 无重复字符的最长子串
Leetcode算法系列| 3. 无重复字符的最长子串
|
7月前
|
算法
【算法专题突破】双指针 - 无重复字符的最长子串(10)
【算法专题突破】双指针 - 无重复字符的最长子串(10)
20 0
|
8月前
无重复字符的最长子串
写一个if语句,当left小于right的时候,就写一个循环遍历从left下标开始的元素到right下标前面的元素,判断是否与right下标的元素相同,相同的话就跳出循环,令left 等于 与 right下标元素相同的元素后面的元素.怎么判断在left和right之间是否存在又和right相同的元素呢?这就用到了falg.如果left < right 的时候就让 right++; max = max = right - left + 1。
31 0
|
11月前
|
算法 Java Python
leetcode:3.无重复字符的最长子串
首先最容易想到的就是暴力解法,列出所有的子字符串,然后逐个检查是否包含重复的字符就行了,这样思路很简单,但是效率太慢,不推荐。
37 0
|
12月前
|
算法 前端开发 JavaScript
[LeetCode] 无重复字符的最长子串 & 最长回文子串
博主最近在看新的工作机会,也是在找一些leetcode上比较高频的算法复习一下,这里分享两道算法题的解题。
53 2
[LeetCode] 无重复字符的最长子串 & 最长回文子串
leetcode 3 无重复字符的最长子串
leetcode 3 无重复字符的最长子串
52 0
leetcode 3 无重复字符的最长子串