两遍循环
/** * @param {string} s * @return {number} */ var lengthOfLongestSubstring = function(s) { var max = 0; for (let i = 0; i < s.length; i++) { var sum = 1; //记录本次无重复字符的最长子串数 var map = new Map(); map.set(s[i], i); for (let j = i + 1; j < s.length; j++) { if (!map.has(s[j])) { map.set(s[j], j); sum++; } else { break; } } max = (sum > max ? sum : max); } return max; };
性能更差了,让我在研究研究。。。
/** * @param {string} s * @return {number} */ var lengthOfLongestSubstring = function(s) { var left = 0; var right = 0; var map = new Map(); var max = 0; //记录无重复最长子串长度 if (s.length === 0) return 0; while (right < s.length) { if (!map.has(s[right])) { map.set(s[right], right); right++; max = (right - left > max ? right - left : max); } else { max = (right - left > max ? right - left : max); left = map.get(s[right]) + 1; map = new Map([...map].filter(([k, v]) => (v >= left && v < right))); map.set(s[right], right); right++; } } return max; };