3. Longest Substring Without Repeating Characters

25 年 10 月 7 日 星期二
309 字
2 分钟

3. Longest Substring Without Repeating Characters

Screenshot 2025-10-07 at 11.49.52 pm

维护一个Map,维护从下标 left 到下标 right 的字符的字符到出现次数的映射,保证次数 <= 1

思路:滑动窗口,如果 [i, j] 区间内有重复字符,移动左指针,删除Set元素,直到没有重复为止。如果没有重复字符。移动右指针增加Set元素,直到有重复为止

js
/**
 * @param {string} s
 * @return {number}
 */
// 思路:滑动窗口,如果 [i, j] 区间内有重复字符,移动左指针,删除Set元素,直到没有重复为止。
// 如果没有重复字符。移动右指针增加Set元素,直到有重复为止
var lengthOfLongestSubstring = function (s) {
  let ans = 0
  let left = 0
  const window = new Set() // 维护从下标 left 到下标 right 的字符
  for (let right = 0; right < s.length; right++) {
    const c = s[right]
    // 如果窗口内已经包含 c,那么再加入一个 c 会导致窗口内有重复元素
    // 所以要在加入 c 之前,先移出窗口内的 c
    while (window.has(c)) {
      // 窗口内有 c
      window.delete(s[left])
      left++ // 缩小窗口
    }
    window.add(c) // 加入 c
    ans = Math.max(ans, right - left + 1) // 更新窗口长度最大值
  }
  return ans
}

文章标题:3. Longest Substring Without Repeating Characters

文章作者:Sirui Chen

文章链接:https://blog.siruichen.me/posts/3_longest_substring_without_repeating_characters[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。