LeetCode Hot 100:无重复字符的最长子串

用滑动窗口和 JavaScript Map 讲清无重复字符的最长子串:重复时推进 left,始终保持窗口内不重复。

本期讲 LeetCode Hot 100 第 3 题「Longest Substring Without Repeating Characters / 无重复字符的最长子串」。核心不是枚举所有子串,而是用滑动窗口保证窗口里没有重复字符:遇到重复字符时,只把 left 向右推进到上一次出现位置的后一格。
function lengthOfLongestSubstring(s) {
  let left = 0;
  let ans = 0;
  const seen = new Map();

for (let right = 0; right < s.length; right++) {
    const ch = s[right];

if (seen.has(ch)) {
      left = Math.max(left, seen.get(ch) + 1);
    }

seen.set(ch, right);
    ans = Math.max(ans, right - left + 1);
  }

return ans;
}
复杂度:每个字符只被右指针扫描一次,左指针也只向右移动,时间复杂度是 O(n)Map 存最近出现位置,空间复杂度是 O(字符集大小)
来源:

相似内容

  • 登录后可发表评论。
More from this channel