天天看點

3. 無重複字元的最長子串題目例子思路代碼

題目

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

例子

示例 1:

輸入: s = "abcabcbb"

輸出: 3 

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

示例 2:

輸入: s = "bbbbb"

輸出: 1

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

示例 3:

輸入: s = "pwwkew"

輸出: 3

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

     請注意,你的答案必須是 子串 的長度,"pwke" 是一個子序列,不是子串。

示例 4:

輸入: s = ""

輸出: 0

思路

滑動視窗思想:

【left  right】當這個範圍内沒有重複字元

去判斷right+1位置的字元是否在【left  right】内重複

如果重複,更新left為right+1

反之這個視窗變成【left  right】

此時長度為 right - left + 1,對比一下最大值max看是否更新

代碼

var lengthOfLongestSubstring = function (s) {
    if (s.length == 0) {
        return 0;
    } else if (s.length == 1) {
        return 1;
    } else {
        let left = 0, right = left + 1, max = 0;
        while (right < s.length) {
            let index = s.indexOf(s[right], left);
            if (index >= left && index < right) {
                left = index + 1;
            } else {
                if (max < (right - left + 1)) {
                    max = right - left + 1;
                }
                right++;
            }
        }
        return max;
    }
}