Skip to content
本页目录

3、无重复字符的最长子串

题目描述:

  • 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
js
示例 1:

输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3

思路如下:

  • 1、用双指针维护一个滑动窗口,用来剪切子串。
  • 2、不断移动右指针,直到遇到重复字符的时候把左指针移到重复字符的下一位。
  • 3、移动指针过程中,记录窗口长度的最大值即为答案。

代码

js
/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function (s) {
  let l = 0; // 定义左指针
  let res = 0; // 结果
  let map = new Map(); // 存放字符和对应下标
  for (let r = 0; r < s.length; r++) {
    // 如果出现了重复字符,则把左指针移到重复字符的下一位。注意同时满足重复字符的索引大于左指针。
    if (map.has(s[r]) && map.get(s[r]) >= l) {
      l = map.get(s[r]) + 1;
    }
    res = Math.max(res, r - l + 1); // 计算结果
    map.set(s[r], r); // 存下每个字符的下标
  }
  return res;
};

MIT Licensed