給定一個字符串,請你找出其中不含有重復字符的 最長子串 的長度。
示例 1:
輸入: s = "abcabcbb"
輸出: 3
解釋: 因為無重復字符的最長子串是 "abc",所以其長度為 3。
示例 2:
輸入: s = "bbbbb"
輸出: 1
解釋: 因為無重復字符的最長子串是 "b",所以其長度為 1。
示例 3:
輸入: s = "pwwkew"
輸出: 3
解釋: 因為無重復字符的最長子串是 "wke",所以其長度為 3。
請注意,你的答案必須是 子串 的長度,"pwke" 是一個子序列,不是子串。
示例 4:
輸入: s = ""
輸出: 0
提示:
0 <= s.length <= 5 * 104
s 由英文字母、數字、符號和空格組成
1 /** 2 * @param {string} s 3 * @return {number} 4 */ 5 var lengthOfLongestSubstring = function(s) { 6 let l = 0; 7 let res = 0; 8 const map = new Map(); 9 for(let r = 0; r < s.length ; r++) { 10 if (map.has(s[r]) && map.get(s[r]) >= l) { // 注意 abbcdea 這種情況 11 l = map.get(s[r]) + 1; 12 } 13 res = Math.max(res, r-l+1); //更新最長子串 14 map.set(s[r], r); 15 } 16 return res; 17 };