3 無重複字元的最長子串 2020 10 29

2021-10-10 02:17:33 字數 1644 閱讀 2259

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

思路是這樣的:

1.利用乙個佇列來儲存當前的字串

2.分類,有幾種情況,第一,字元沒出現過,那麼直接將其塞入佇列即可;第二,字元出現過,那麼就把出現過的字元以及它前面的字元都彈走,然後將新字元塞入即可。由於要求的是長度最大的,那麼我們就要用兩個變數來進行儲存當前的長度以及結果長度。

需要注意的是這個方法對於長度的計算都是在出現重複中的,如果沒有出現重複則在外面輸出就行。

class

solution

:def

lengthoflongestsubstring

(self, s:

str)

->

int:

queue_s =

# 作佇列來儲存結果

result_len =

0# 記錄長度輸出結果

temp_len =

0# 用作比較

for i in s:

if i not

in queue_s:

temp_len +=

1else

: result_len = temp_len if temp_len > result_len else result_len

while queue_s[0]

!= i:

del queue_s[0]

temp_len -=

1del queue_s[0]

result_len = result_len if result_len > temp_len else temp_len

return result_len

改進:利用左右指標來構建乙個佇列,長度用right-left 來計量,減少記憶體消耗

class

solution

:def

lengthoflongestsubstring

(self, s:

str)

->

int:

left =

0 right =

0 result_len =

0# 記錄長度輸出結果

for right in

range

(len

(s))

:if s[right]

notin s[left:right]

: right +=

1else

: result_len = right-left if right-left > result_len else result_len

while s[left]

!= s[right]

: left +=

1 left +=

1 right +=

1 result_len = result_len if result_len > right-left else right-left

return result_len

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

3 無重複字元的最長子串

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