也是通過滑動視窗的思路,固定左端,移動右端;再移動左端。
class
solution
(object):
deflengthoflongestsubstring
(self, s)
:"""
:type s: str
:rtype: int
"""size =
len(s)
l,r =0,
-1# [l,r]子串
longest =
0 cur =
# 當前子串
while l < size:
if r+
1< size and s[r+1]
notin cur:1]
) r +=
1else
:# 有重複字母或右端達到末尾
cur.pop(0)
# 左端右移一位,繼續嘗試
雖然accept,但是耗時有點久,回顧下**,發現問題出現了判斷是否有重複元素那裡。
這裡可以用集合來優化,除了集合的方式。還有一種位圖(bitmap,程式設計珠璣)的思路。
class
solution
(object):
deflengthoflongestsubstring
(self, s)
:"""
:type s: str
:rtype: int
"""size =
len(s)
l,r =0,
-1# [l,r]子串
bitmap =[0
]*256# ascii碼 ,如果bitmap[5] = 1,說明ascii碼為5的元素已經在集合中。
longest =
0while l < size:
if r+
1< size and bitmap[
ord(s[r+1]
)]==0
: bitmap[
ord(s[r+1]
)]=1
r +=
1else
:# 有重複字母或右端達到末尾
Leetcode刷題之路 3 無重複的最長字串
給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew 輸出 3 ...
LeetCode刷題 3 無重複字元的最長字串
給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew 輸出 3 ...
LeetCode 刷題 3 無重複最長子串
題目描述 給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。測試示例 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。輸入 pwwkew 輸出 3 解釋 因為...