無重複字元的最長子串

2021-09-26 08:29:20 字數 1276 閱讀 6841

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

示例 1:

輸入: "abcabcbb"

輸出: 3

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

示例 2:

輸入: "bbbbb"

輸出: 1

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

示例 3:

輸入: "pwwkew"

輸出: 3

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

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

思路:

這道題主要用到思路是:滑動視窗

什麼是滑動視窗?

其實就是乙個佇列,比如例題中的 abcabcbb,進入這個佇列(視窗)為 abc 滿足題目要求,

當再進入 a,佇列變成了 abca,這時候不滿足要求。所以,我們要移動這個佇列!

如何移動?

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

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

時間複雜度:o(n)

**:

python

class solution:

def lengthoflongestsubstring(self, s: str) -> int:

if not s:return 0 #如果s為空,返回0

left = 0 #佇列開始下標為0

lookup = set() #建立乙個空集合

n = len(s) #獲得字串的長度

max_len = 0 #初始化最長字串長度

cur_len = 0 #初始化當前長度

for i in range(n): #從0到n-1

cur_len += 1 #長度加1

while s[i] in lookup: #判斷當前字元是否在集合中

lookup.remove(s[left]) #如果在,就移除字串最左邊的字元

left += 1 #向右移動一位

cur_len -= 1 #長度減一位

if cur_len > max_len:max_len = cur_len #判斷當前長度和最大長度哪個大,

#如果當前長度大,

lookup.add(s[i])

return max_len

無重複字元最長子串

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

無重複字元最長子串

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

無重複字元的最長子串

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