示例 1: | ||
输入: s = "abcabcbb" | ||
输出: 3 | ||
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 | ||
示例 2: | ||
输入: s = "bbbbb" | ||
输出: 1 | ||
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 | ||
示例 3: | ||
输入: s = "pwwkew" | ||
输出: 3 | ||
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 | ||
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。 |
滑动窗口:维护一个无重复队列-> 如果出现重复元素时,移除首个重复元素及左侧元素;计算当前队列长度,更新最大队列长度
时间复杂度:O(n)
var lengthOfLongestSubstring = function (s) { let maxLen = 0 let l = 0 // 维护一个不重复队列 for(let i = 0; i < s.length; i++) { // 当前值的首个下标 < 当前值的下标 => l 移动到首个下标之后 if(s.indexOf(s[i], l) < i) { l = s.indexOf(s[i], l) + 1 } // 更新队列长度,maxLen let len = i - l + 1 maxLen =Math.max(maxLen,len) } return maxLen };