leecode 無重複字元的最長子串的三種解決方法

2021-09-26 20:50:11 字數 1617 閱讀 2882

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

示例 1:

輸入: 「abcabcbb」

輸出: 3

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

示例 2:

輸入: 「bbbbb」

輸出: 1

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

示例 3:

輸入: 「pwwkew」

輸出: 3

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

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

class solution:

def lengthoflongestsubstring(self, s):

lenth=1

lenth_max=0

while len(s)!=0:

dict1={}

lenth = 1

for num1,letter in enumerate(s):

dict1[letter]=num1

if len(dict1)但是這種方法不太好,有些拐彎抹角,不直接

方法二:滑動視窗的經典方法

class solution:

def lengthoflongestsubstring(self, s):

window=

lenth_max=0

for n in s:

if n not in window:

else:

window=window[window.index(n)+1:]

lenth_max=max(len(window),lenth_max)

print(lenth_max)

return lenth_max

效果還行

但是我們發現還有改進的空間,在查詢字元是否在字串的過程中,我們可以利用字典(雜湊表)來實現快速查詢,從而加快速度

方法三:在二的基礎上稍作改進,使用字典來提高查詢效率:

class solution:

def lengthoflongestsubstring(self, s):

dict1={}

lenth_max=0

i=-1

for n,letter in enumerate(s):

if letter in dict1 and dict1[letter] > i:

i=dict1[letter]

dict1[letter] = n

else:

dict1[letter] = n

lenth_max=max(n-i,lenth_max)

print(lenth_max)

return(lenth_max)

效果不錯

leecode 無重複字元的最長子串

給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。題解 因為題目中所有的字元都是字元,字元的ascall碼不大於300,用乙個300的word陣列來儲存,每個字元在字串中的位置,當字元重複時,將該字元首次出現的字元的位置求解出來,利用word陣列儲存陣列的便利,將該位置之前所有的字元除去...

Leecode熱題100 無重複字元的最長子串

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

Leecode3 無重複字元的最長子串

題目說明 如,在 abcabcbb 中,其無重複字元的最長子字串是 abc 其長度為 3 對於,bbbbb 其無重複字元的最長子字串為 b 長度為1。基本思路 遍歷該字串,往集合裡面插入元素 1 插入成功,說明無重複,繼續插入 2 插入不成功時,元素有重複,記錄當前最大長度,查詢與當前元素重複的前面...