3 無重複字元的最長子串

2021-09-28 17:56:01 字數 1271 閱讀 6881

滑動視窗法:

開始自己使用的dict來解決這個問題,改bug的過程異常艱辛,總是想到各種意想不到的情況。

dict想用來記錄某個字母最後一次出現的位置,用來判斷是不是出現重複子串,一旦出現重複則看當前子串長度,並且更改left

這裡需要注意兩個問題:

1、當字母最後一次出現的位置2、最後乙個字母需要特殊處理

最後**如下:可讀性非常不高!

class solution:

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

dict={}

length=0

left = 0

for i in range(len(s)):

if s[i] not in dict:

dict[s[i]]=i

if i==len(s)-1:

if i-left+1>length:

return i-left+1

else:

return length

else:

if dict[s[i]]>=left:

if i-left>length:

length=i-left

left =dict[s[i]]+1

dict[s[i]]=i

if i==len(s)-1:

if i-left+1>length:

return i-left+1

else:

return length

return length

後來看到了更好的滑動視窗的解法,很激動!借助set很容易知道視窗中有什麼字母。

class solution:

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

if not s:

return 0

lookup=set()

maxlen=0

curlen=0

left = 0

for ch in s:

curlen+=1

while ch in lookup:

lookup.remove(s[left])

left+=1

curlen-=1

if curlen>maxlen:

maxlen=curlen

lookup.add(ch)

return maxlen

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解釋 因為...