給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。
示例 1:
輸入: 「abcabcbb」
輸出: 3
解釋: 因為無重複字元的最長子串是 「abc」,所以其長度為 3。
示例 2:
輸入: 「bbbbb」
輸出: 1
解釋: 因為無重複字元的最長子串是 「b」,所以其長度為 1。
示例 3:
輸入: 「pwwkew」
輸出: 3
解釋: 因為無重複字元的最長子串是 「wke」,所以其長度為 3。
請注意,你的答案必須是 子串 的長度,「pwke」 是乙個子串行,不是子串。
class
solution
:def
lengthoflongestsubstring
(self, s:
str)
->
int:
len_max =
0# 最長的字串長度
len_str =
0# 當前的字串長度
list_str =
# 儲存無重複的子串
for a in s:
# 遍歷字串
if a in list_str:
# 當前遍歷的字元在前面的子串中已經存在
iflen
(list_str)
> len_max:
len_max =
len(list_str)
# 將列表中儲存的子串重複字元以及前面的字元全部刪除
while list_str[0]
!= a:
del list_str[0]
del list_str[0]
# 當前遍歷的字元加入字串中
else
:# 當前遍歷的字元在字串中沒有重複
iflen
(list_str)
> len_max:
len_max =
len(list_str)
return len_max
解決這道題中犯了很蠢的錯誤,找了很久都沒找到原因。在實現功能將列表中儲存的子串重複字元以及前面的字元全部刪除的時候,一開始採用如下**:
# 將列表中儲存的子串重複字元以及前面的字元全部刪除
i =0while i <
len(list_str)
:if list_str[0]
!= a:
del list_str[0]
i +=
1else
:del list_str[0]
break
在後來除錯的時候,發現while迴圈內部總是只迴圈一次,可是len(list_str)的值為2,迴圈沒有理由不執行兩次。苦思冥想許久,突然發現每次迴圈都del一次導致列表長度減1,所以迴圈永遠至進行一次。
初學python對語法和一些內建函式還不熟悉,再加上很久沒做過程式設計題,在這種低階錯誤上浪費太多時間。
力扣LeetCode刷題日記(一)
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...
力扣刷題日記(3)
最近有點懶,哈哈,刷題挺慢的,今天用python3 練練手了,題目如下 設計你的迴圈佇列實現。迴圈佇列是一種線性資料結構,其操作表現基於 fifo 先進先出 原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為 環形緩衝器 迴圈佇列的乙個好處是我們可以利用這個佇列之前用過的空間。在乙個普通佇列裡,...
力扣刷題日記(5)
給定乙個由整數組成的非空陣列所表示的非負整數,在該數的基礎上加一。最高位數字存放在陣列的首位,陣列中每個元素只儲存乙個數字。你可以假設除了整數 0 之外,這個整數不會以零開頭。示例 1 輸入 1,2,3 輸出 1,2,4 解釋 輸入陣列表示數字 123。示例 2 輸入 4,3,2,1 輸出 4,3,...