3 無重複字元的最長子串

2021-09-13 01:48:06 字數 1157 閱讀 4565

題目:給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。

示例 1:

輸入: "abcabcbb"

輸出: 3

解釋: 因為無重複字元的最長子串是 "abc",所以其長度為 3。

示例 2:

輸入: "bbbbb"

輸出: 1

解釋: 因為無重複字元的最長子串是 "b",所以其長度為 1。

示例 3:

輸入: "pwwkew"

輸出: 3

解釋: 因為無重複字元的最長子串是 "wke",所以其長度為 3。

請注意,你的答案必須是 子串 的長度,"pwke" 是乙個子串行,不是子串。
解答:

1.暴力破解

var lengthoflongestsubstring = function(s)  else }}

function check(start, end) else

}return true;

}return re

};

上來就是一頓for迴圈操作,這樣暴力寫我們的leetcode肯定是不會給過的,因為遇到超級長的字串測試用例,執行時間會超出時間限制,上面**的優化空間很大。

理一下邏輯,我們每次在2裡面檢測出有重複的字元時,記錄這個重複字元前一次出現的位置index,然後中斷這次迴圈,開始下一次1的迴圈,並且i的位置應該為index+1。

比如在i=0的時,在2迴圈裡j=4時就會出現重複的字元d,字元d前一次出現的位置是1,這時最長字串長度是4,並且被記錄,這時應該開始1迴圈的下一次迴圈,並且是從i=2開始。

3迴圈和2迴圈其實是不必要的,我們建立乙個動態的字串,把每次迴圈到的字元加進去並實時記錄它的長度,遇到重複的字串就砍掉字元第一次出現跟它之前的字串,比如上圖,i迴圈到4時,出現重複字元d,d在之前出現的位置是1,我們應該砍掉動態字串位置1跟它之前的字串,來保證它是無重複的字串。**如下

var lengthoflongestsubstring = function(s) 

a+=s[i]

re = math.max(re, a.length);

}return re

};

一下從矮窮挫變成高富帥,速度槓槓噠!

3 無重複字元的最長子串

給定乙個字串,找出不含有重複字元的最長子串的長度。示例 給定 abcabcbb 沒有重複字元的最長子串是 abc 那麼長度就是3。給定 bbbbb 最長的子串就是 b 長度是1。給定 pwwkew 最長子串是 wke 長度是3。請注意答案必須是乙個子串,pwke 是 子串行 而不是子串。思路 用 i...

3 無重複字元的最長子串

給定乙個字串,找出不含有重複字元的最長子串的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 無重複字元的最長子串是 abc 其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 無重複字元的最長子串是 b 其長度為 1。示例 3 輸入 pwwkew 輸出 3 解釋 無重複字元的最長子串是...

3 無重複字元的最長子串

給定乙個字串,請你找出其中不含有重複字元的最長子串的長度。示例 1 輸入 abcabcbb 輸出 3解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew 輸出 3解釋 因為...