leetcode——中級演算法——陣列和字串——無重複字元的最長字串
阿新 • • 發佈:2018-11-14
給定一個字串,找出不含有重複字元的最長子串的長度。
示例1
輸入: "abcabcbb"
輸出: 3
解釋: 無重複字元的最長子串是 "abc",其長度為 3
示例2
輸入: "bbbbb"
輸出: 1
解釋: 無重複字元的最長子串是 "b",其長度為 1。
示例3
輸入: "pwwkew"
輸出: 3
解釋: 無重複字元的最長子串是 "wke",其長度為 3。
請注意,答案必須是一個子串,"pwke" 是一個子序列 而不是子串。
思路
設定儲存當前不含重複元素的子串 sub=" ",設定字串的最大長度 maxLen = 0.
迴圈遍歷每個字元c,若:
- 字串sub中不包含c,則將c加入sub,更新最大長度maxLen
- sub包含c,則需要刪除sub中c及c之前的元素,然後將c加入sub。
最後返回maxLen即可。
/** * @param {string} s * @return {number} */ var lengthOfLongestSubstring = function(s) { let maxLen = 0; let sub = ''; for (let c of s) { if (sub.includes(c)) { // 子串中含有當前字元 sub = sub.slice(sub.indexOf(c) + 1) + c; // 將子串更新 } else { // 不含 sub += c; maxLen = Math.max(maxLen, sub.length); // 更新最大長度 } } return maxLen; };