給定乙個字串s,返回s的最長無重複字元子串的長度。例如
記錄每個字元前一次出現的位置positios,及到當前字元滿足不重複子串的前乙個位置prev,遍歷字串過程,遍歷到位置i,字元為c,positions[c]為前乙個c出現的位置記為prev_c,用prev_c跟prev比較,如果大於prev,則更新prev,表示滿足條件的位置右移了。乙個滿足條件的子串為prev->i。如:
s = 『abbacda』
遍歷到s[5]時,prev為s[2],滿足條件的子串為』bacd』,到s[6]時,字元為』a』,需要更新prev為s[3],因為之前的prev已不符合條件。
def
max_unique_length
(s):
if s is
none
orlen
(s)==0:
return
0 positions =
pre =-1
ans =
0for i, c in
enumerate
(s):
pre =
max(pre, positions.get(c,-1
))ans =
max(ans, i - pre)
positions[c]
= i return ans
def
test_max_unique_length()
:assert
(max_unique_length(
'abcd')==
4)assert
(max_unique_length(
'aabcb')==
3)assert
(max_unique_length(
'aaaaa')==
1)assert
(max_unique_length(
'aabaa')==
2)assert
(max_unique_length(
'acbbda')==
3)print
('done'
)if __name__ ==
'__main__'
: test_max_unique_length(
)
牛客網-給定乙個陣列arr,返回arr的最長無的重複子串的長度 找到字串的最長無重複字元子串
題目 給定乙個字串str,返回str中最長無重複字元子串的長度。舉例 str abcd 返回4。str aabcb 返回3。基本思路 如果str的長度為n,字元的編碼範圍為m,本題可以做到時間複雜度為o n 空間複雜度o m 具體方法如下 在遍歷str之前,先申請幾個變數。雜湊表map,key表示某...
找到字串的最長無重複字元子串
找到字串的最長無重複字元子串 給定乙個陣列arr,返回arr的最長無的重複子串的長度 無重複指的是所有字母都不相同 輸入描述 輸入包含兩行,第一行包含乙個整數n 1 n 1 05 n 1 leq n leq 10 5 n 1 n 105 代表陣列arr的長度,第二行包含n個整數,代表陣列arr 1 ...
字串問題 找到字串的最長無重複字元子串
題目 給定乙個字串str,返回str中最長無重複字元子串的長度。舉例 str abcd 返回4。str aabcb 返回3。基本思路 如果str的長度為n,字元的編碼範圍為m,本題可以做到時間複雜度為o n 空間複雜度o m 具體方法如下 在遍歷str之前,先申請幾個變數。雜湊表map,key表示某...