# 3. 无重复字符的最长子串

# 题目

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

输入: "abcabcbb"

输出: 3

解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

# 题解

# 滑动窗口

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
  // 哈希集合保存窗口中的字符
  let x = new Map();
  // 窗口左侧位置
  let l = 0;
  let max = 0;
  for (let r = 0; r < s.length; ++r) {
    let t = s[r];
    // 如果最新的字符已经存在那就把从左边界到之前存在的字符之间的都刪除
    if (x.has(t)) {
      while (l <= x.get(t)) {
        x.delete(s[l]);
        l++;
      }
    }
    x.set(t, r);
    max = Math.max(x.size, max);
  }
  return max;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24