給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。
思路是這樣的:
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解釋 因為...