無重複字元的最長子串

2022-06-24 12:51:11 字數 1445 閱讀 9235

類似於推箱子遊戲, 無重複字元的最長子串就是乙個大的箱子, 遍歷字串,每次取乙個字元推進去, 如果發現箱子裡面已經有了重複的字元, 就開始推舊字元出箱子, 直到箱子無與新字元重複的字元.

以字串"aab"舉列

被推出來的字元

最長無重複字元"箱子"

待處理字串

無取第乙個字元a進箱子

ab在外面

第乙個字元的a被推出來了

取第二個字元a進箱子

b在外面

第乙個字元的a被推出來了

留在箱子裡的a同時取b進箱子

無剩餘字元

class solution:

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

# 最長無重複字串的"箱子"

st = ''

# 最大長度

m = 0

for i in s:

if i not in st:

st += i

else:

# 將舊的推出箱子, 同時儲存前一次無重複的長度

m = max(m, len(st))

if len(st) != 1:

st = st[st.find(i) + 1:] + i

return max(m, len(st))

執行速度太慢了, 佔記憶體過多, 有待改進

類似於推箱子遊戲, 無重複字元的最長子串就是乙個大的箱子, 遍歷字串,每次取乙個字元推進去, 如果發現箱子裡面已經有了重複的字元, 就開始推舊字元出箱子, 直到箱子無與新字元重複的字元.

以字串"aab"舉列

被推出來的字元

最長無重複字元"箱子"

待處理字串

無取第乙個字元a進箱子

ab在外面

第乙個字元的a被推出來了

取第二個字元a進箱子

b在外面

第乙個字元的a被推出來了

留在箱子裡的a同時取b進箱子

無剩餘字元

class solution:

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

# 最長無重複字串的"箱子"

st = ''

# 最大長度

m = 0

for i in s:

if i not in st:

st += i

else:

# 將舊的推出箱子, 同時儲存前一次無重複的長度

m = max(m, len(st))

if len(st) != 1:

st = st[st.find(i) + 1:] + i

return max(m, len(st))

執行速度太慢了, 佔記憶體過多, 有待改進

無重複字元最長子串

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

無重複字元最長子串

題目描述 給定乙個字串,找出不含有重複字元的 最長子串 的長度。示例 給定 abcabcbb 沒有重複字元的最長子串是 abc 那麼長度就是3。給定 bbbbb 最長的子串就是 b 長度是1。給定 pwwkew 最長子串是 wke 長度是3。請注意答案必須是乙個子串,pwke 是子串行而不是子串 i...

無重複字元的最長子串

給定乙個字串,找出不含有重複字元的最長子串的長度。示例 給定 abcabcbb 沒有重複字元的最長子串是 abc 那麼長度就是3。給定 bbbbb 最長的子串就是 b 長度是1。給定 pwwkew 最長子串是 wke 長度是3。請注意答案必須是乙個子串,pwke 是 子串行 而不是子串。int le...