js一刷法一(布尔集合)
javascript
var lengthOfLongestSubstring = function (s) {
let idx = new Set();
let i = 0;
let len = 0;
for (let j = 0; j < s.length; j++) {
while (idx.has(s[j])) {
idx.delete(s[i]);
i++;
}
idx.add(s[j]);
len = Math.max(len, j - i + 1);
}
return len;
};
js一刷法二
javascript
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function (s) {
let idx = new Map();
let i = 0;
let len = 0;
for (let j = 0; j < s.length; j++) {
while (idx.get(s[j])) {
idx.set(s[i], idx.get(s[i]) - 1);
i++;
}
idx.set(s[j], (idx.get(s[j]) ?? 0) + 1);
len = Math.max(len, j - i + 1);
}
return len;
};
核心思想:滑动窗口
语法细节: (idx.get(s[j]) ?? 0),如果左边是false的话返回0,否则返回idx.get(s[j])