- Published on
Leetcode - Sliding Window | 滑动窗口 | 无重复字符的最长字串
- Authors
- Name
- Shelton Ma
3. 无重复字符的最长字串
给定一个字符串 s,请你找出其中不含有重复字符的 最长子串 的长度.
思路(滑动窗口):
- 使用双指针(start、end)和一个哈希表 / Map 来记录字符出现的位置.
- end 指针向右移动,如果遇到重复字符,就把 start 移动到重复字符的下一个位置.
- 不断更新窗口长度的最大值.
实现
// abcdacd function lengthOfLongestSubstring(s) { let map = new Map(); let maxLen = 0; let start = 0; for (let end = 0; end < s.length; end++) { const char = s[end]; if (map.has(char)) { // 如果出现重复字符,移动 start start = Math.max(map.get(char) + 1, start); } map.set(char, end); maxLen = Math.max(maxLen, end - start + 1); } return maxLen; }