LeetCode 題三 無重複長度字串

2021-10-23 17:55:02 字數 2519 閱讀 7506

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

給出乙個不限長的字串,請你找出不含有重複字串的最長字串

例項:

輸入:

"abcabcbb"

輸出:3

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

輸入:"bbbbb"

輸出:1

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

輸入:"pwwkew"

輸出:3

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

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

思路一:滑動視窗解法

什麼是滑動視窗?

其實就是乙個佇列,比如例題中的abcabcbb,進入這個佇列(視窗)為abc滿足題目要求,當再進入a,佇列變成了abca,這時候不滿足要求。所以,我們要移動這個佇列!

如何移動?

我們只要把佇列的左邊的元素移出就行了,直到滿足題目要求!

一直維持這樣的佇列,找出佇列出現最長的長度時候,求出解!

時間複雜度:o(n)

細節分析

(a)bcabcbb開始的最長字串為a(abc)abcbb

a(b)cabcbb開始的最長字串為a(bca)bcbb

ab(c)abcbb開始的最長字串為ab(cab)cbb

abc(a)bcbb開始的最長字串為abc(abc)bb

abca(b)cbb開始的最長字串為abca(bc)bb

abcab(c)bb開始的最長字串為abcab(cb)b

abcabc(b)b開始的最長字串為abcabc(b)b

abcabcb(b)開始的最長字串為abcabcb(b)

**實現

class

solution

:def

lengthoflongestsubstring

(self, s:

str)

->

int:

ifnot s:

return0if

len(s)

<1:

return

len(s)

left =

0 n =

len(s)

cur_len =

0 max_len =

0 lookup =

set(

)for i in

range

(n):

cur_len +=

1while s[i]

in lookup:

lookup.remove(s[left]

) left +=

1 cur_len -=

1if cur_len > max_len:

max_len = cur_len

lookup.add(s[i]

)return max_len

python基礎知識點分析

關於python的資料結構set(),list(),dict()的查詢效率問題

查詢效率從大到小:set()>dict()>list()

其時間複雜度依次為:o(logn)、o(logn)、o(n)

感興趣的同學可以參考此篇文章——傳送門

演算法耗時:

思路二:利用字典進行索引比較

class

solution

:def

lengthoflongestsubstring

(self, s:

str)

->

int:

st =

i,ans =0,

0for j in

range

(len

(s))

:if s[j]

in st:

i =max(st[s[j]

],i)

ans =

max(ans,i)

st[s[j]

]= j

return ans

測試結果:

這裡貼上leetcode**:傳送門

leetcode 三 無重複字元子串

題目 給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。解法解析 solution hua jie suan fa 3 wu zhong fu zi fu de zui chang z 思路標籤 滑動視窗 暴力解法時間複雜度較高,會達到 o n 2 故而採取滑動視窗的方法降低時間複雜度 ...

LeetCode刷題筆記 三)無重複字元的最長子串

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

LeetCode演算法學習三 無重複字元的最長子串

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