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

2021-10-05 16:40:27 字數 693 閱讀 3076

3. 無重複字元的最長子串

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

示例 3:

輸入: 「pwwkew」

輸出: 3

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

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

思路:如果遍歷所有子串並檢查子串中字元是否重複,時間複雜度為o(n3),可以維護乙個視窗,視窗中所有的字元都不重複,不斷擴充視窗右端,當擴充後的視窗不滿足條件,就收縮視窗左端。

採用雜湊表來查詢元素是否出現過,查重操作就可以在o(1)時間內完成。

時間複雜度為o(n),n為字串的長度。

class solutionelse

}return result;

}};

優化:上述雜湊表對映的只是字元c是否在視窗內。考慮當我們擴充視窗右部,視窗內的字串不滿足條件必然是視窗右部剛剛新加入的字元,如果我們把hash表的值設為字元c出現的下標,那麼當條件不滿足的時候,只需要將視窗的左部改變為hash[c]+1,即跳過遍歷前面所有含c的子串(因為視窗已經有乙個字元c了)。

時間複雜度:o(n)

優化後的滑動視窗

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

給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。我們可以定義字元到索引的對映,而不是使用集合來判斷乙個字元是否存在。當我們找到重複的字元時,我們可以立即跳過該視窗。也就是說,如果 s...

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

給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。使用list的情況下可以儲存最長的字串什麼樣子,但是這道題不需要返回最長字串,所以list不好 class solution else retu...

滑動視窗 無重複字元的最長子串

1.引入 滑動視窗是陣列 字串問題中常用的抽象概念。視窗通常是在陣列 字串中由開始和結束索引定義的一系列元素的集合,即 i,j i,j 左閉,右開 而滑動視窗是可以將兩個邊界向某一方向 滑動 的視窗。例如,我們將 i,j i,j 向右滑動 11 個元素,則它將變為 i 1,j 1 i 1,j 1 左...