題目:給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。
示例 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解釋 因為...