

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(字符集大小)。来源:
Contenido relacionado
- Inicia sesión para comentar.
