1. 程式人生 > >leetcode——中級演算法——陣列和字串——無重複字元的最長字串

leetcode——中級演算法——陣列和字串——無重複字元的最長字串

給定一個字串,找出不含有重複字元的最長子串的長度。
示例1

輸入: "abcabcbb"
輸出: 3 
解釋: 無重複字元的最長子串是 "abc",其長度為 3

示例2

輸入: "bbbbb"
輸出: 1
解釋: 無重複字元的最長子串是 "b",其長度為 1。

示例3

輸入: "pwwkew"
輸出: 3
解釋: 無重複字元的最長子串是 "wke",其長度為 3。
     請注意,答案必須是一個子串,"pwke" 是一個子序列 而不是子串。

思路

設定儲存當前不含重複元素的子串 sub=" ",設定字串的最大長度 maxLen = 0.
迴圈遍歷每個字元c,若:

  1. 字串sub中不包含c,則將c加入sub,更新最大長度maxLen
  2. 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;
};