LeetCode-無重複字符的最長子串

要解決的問題?

"abcabcbb" => 3 //無重複字符的最長子串是 "abc",長度爲 3。javascript

"abcabcbb" => 1 //無重複字符的最長子串是 "b",長度爲 1。java

"pwwkew" => 3  //無重複字符的最長子串是 "wke",長度爲 3。數組

思路

轉換字符串爲字符數組Cspa

建立空數組A用於存放從數組C中截取的非重複字符串code

建立變量L用於存儲較長字符串長度。 cdn

遍歷字符數組C,根據當前遍歷字符是否存在於數組A中,對數組A進行操做

若是存在  爲保障數組A不包含數組C中截取的非重複字符串,須要截取重複字符以後的全部字符串從新賦值數組A,並將當前遍歷字符壓入,此操做壓入一個字符刪除至少一個字符因此操做後數組A的長度將小於等於上一次操做後數組A的長度,故L將維持上一次操做後數組A的長度不變。blog

若是不存在  則代表數組A中不存在當前遍歷字符,可將當前字符壓入,此操做看似數組A的長度將大於變量L,但存在上次遍歷字符爲重複字符,則變量L爲上上次操做後數組A的長度,因此須要比較當前數組A長度和變量L大小,將較大者賦值給變量L,ip

通過上訴操做後變量L將保存字符數組C中的最長非重複字符串長度字符串


/** * @param {string} s * @return {number} */
var lengthOfLongestSubstring = function(s) {
  const strs = s.split(""), LongestArr = [];
  let LALength = 0;
  strs.map(str => {
    let LAIndex = LongestArr.indexOf(str);
    if (LAIndex < 0) {
      LongestArr.push(str);
      LALength = LongestArr.length > LALength ? LongestArr.length : LALength;
    } else {
      LongestArr.splice(0, LAIndex + 1);
      LongestArr.push(str);
    }
    return 0;
  });
  return LALength
};
複製代碼
相關文章
相關標籤/搜索