滑动窗口:求字符串中「不含重复字符的最长子串」长度。
思路:维护一个窗口 [left, right],用哈希/集合记录窗口内字符;遇重复就右移 left 直到无重复。
function lengthOfLongestSubstring(s) {
const set = new Set()
let left = 0, max = 0
for (let right = 0; right < s.length; right++) {
while (set.has(s[right])) {
set.delete(s[left])
left++
}
set.add(s[right])
max = Math.max(max, right - left + 1)
}
return max
}- 时间
O(n)(每个字符进出窗口各一次),空间O(min(n, m))(m 为字符集) - 滑动窗口通用套路:右扩 → 不满足条件时左缩 → 更新答案