滑动窗口
解题思路
定义变量 maxLen 表示最大长度,定义一个 map 用来存储出现过的字符和该字符的索引;
使用双指针 left、right 截取不含重复字符的子串;
- left 和 right 初始值都是 0 ,right 不断右移,不断将 right 位置的字符放到 map 中;
- 如果存在重复字母,left 直接移动到重复字母的索引位置+1(只取索引大于 left 的重复字母的索引);
- 如果不存在重复字母 right 不断右移,计算子串长度
right - left + 1
,保留较大值到 maxLen;
复杂度:
-
时间复杂度:
O(n)
-
空间复杂度:
O(1)
代码实现
var lengthOfLongestSubstring = function (s) {
let map = new Map();
let left = 0, right = 0, maxLen = 0;
while (right < s.length) {
let letter = s[right];
if (map.has(letter)) {
let inx = map.get(letter) + 1;
left = left > inx ? left : inx;
}
map.set(letter, right);
maxLen = Math.max(maxLen, right - left + 1);
right++;
}
return maxLen;
};
118.杨辉三角
上一篇