题目
解题
使用 滑动窗口 来求解,left 记录的是无重复字符串起始位置前的索引:这样方便计算长度。特别注意 ⚠️ ,只有当 s[i] 在 map 中并且 在 left 的右侧时才需要更新 left(如果 <= left 的话,当前字符串根本没有包含 s[i],所以无须更新,=left 也不用更新是因为字符串是从 left + 1 开始计起的)。
// javascript
var lengthOfLongestSubstring = function(s) {
let map = new Map(), maxLen = 0, left = -1;
for (let i = 0; i < s.length; i++) {
if (map.has(s[i]) === true && map.get(s[i]) > left) {
left = map.get(s[i]);
}
map.set(s[i], i); // 每次都更新
maxLen = Math.max(maxLen, i - left); // 每次都重算 maxLen
}
return maxLen;
};