3種解法 計算無重複字元的最長子串

2021-10-02 14:02:22 字數 1174 閱讀 3447

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

示例 1:

輸入: 「abcabcbb」

輸出: 3

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

示例 2:

輸入: 「bbbbb」

輸出: 1

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

示例 3:

輸入: 「pwwkew」

輸出: 3

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

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

思路:使用乙個列表儲存無重複子字串,如果新字元在子串中,那麼已經統計了當前子串的最大值,需要往後進行訪問,尋找其它子串,為了防止重複,則把最開頭到子串中字元重複位置的都刪除,並加入新字元,保證子串中沒有重複的字元。

將字串從前到後按字元進行遍歷,並建立無重複子字串

找到子串中跟新字元相同字元的位置,並刪除從前面到該位置所有字元,重新開始尋找新的子串

用c記錄每個子串長度,用mx記錄最大的長度

public

class

solution

r.add(item)

; c++

; mx = c>mx?c:mx;

}return mx;

}}

思路:使用乙個字串儲存每個字元的最大位置,如果重複出現,使用當前位置減去上次出現的位置,即為當前子串的最大長度。

記錄每個字元出現的最大位置,c記錄最後開始位置

用本次的位置減去上次的開始位置,即為當前包含子串的最大長度

用mx記錄每個子串的最大值

public

class

solution

return mx;

}}

兩層迴圈得到全部子串

判斷子串是否存在相同字元

儲存滿足條件的最長子串

public

class

solution

r.add(s[k]);

}if(!flag)}}

return mx;

}}

3 無重複字元的最長子串(滑動視窗解法)

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

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 解釋 無重複字元的最長子串是...