Skip to main content

无重复字符的最长子串

题目

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

提示:
  • 0 <= s.length <= 5 * 10⁴
  • s 由英文字母, 数字, 符号和空格组成
示例
输入: s = "bacabcbb"

输出: 3

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

输出: 3

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

题解

Slide 1 of 10
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function (s) {
const n = s.length
const map = new Map()
let start = 0
let end = 0
let max = 0

while (end < n) {
const endCh = s[end++]
map.set(endCh, map.has(endCh) ? map.get(endCh) + 1 : 1)

while (map.get(endCh) > 1) {
const startCh = s[start++]
map.set(startCh, map.get(startCh) - 1)
}

max = Math.max(max, end - start)
}

return max
}

复杂度分析

  • 时间复杂度: O(n)
  • 空间复杂度: O(n)