/** * @param {string} s * @return {number} */ var lengthOfLongestSubstring = function(s) { let startIdx = 0 let maxLength = 0 let curSet = new Set() for (let endIdx = 0; endIdx < s.length; endIdx++) { if (curSet.has(s[endIdx])) { var prevEndIdx = endIdx - 1 maxLength = Math.max(prevEndIdx - startIdx + 1, maxLength) while (s[startIdx] !== s[endIdx]) { // 視窗左邊界向右收縮,更新 curSet curSet.delete(s[startIdx]) startIdx++ } startIdx++ // 左邊界已指到重複字母的位置,往右再收縮一格 } else { curSet.add(s[endIdx]) } if (endIdx === (s.length - 1)) { maxLength = Math.max(endIdx - startIdx + 1, maxLength) } } return maxLength };
參考:用 JavaScript 解 LeetCode — Самая длинная подстрока без повторяющихся символов