找到字串的最長無重複字元子串

2021-09-26 02:34:20 字數 1073 閱讀 3634

題目:

給定乙個字串str,返回str中最長無重複字元子串的長度。

舉例:str = 「abcd」,返回4。 

str = 「aabcb」,返回3。

基本思路:

如果str的長度為n,字元的編碼範圍為m,本題可以做到時間複雜度為o(n),空間複雜度o(m)。具體方法如下:

在遍歷str之前,先申請幾個變數。雜湊表map,key表示某個字元,value為這個字元最近出現的位置。整型變數pre,如果當前遍歷到的字元為str[i],pre表示必須以str[i-1]結尾的情況下,最長無重複字元子串開始位置的前乙個位置,初始時pre = -1。全域性變數length儲存出現的最長長度。從左到右依次遍歷str,遍歷到str[i]時,計算必須以str[i]結尾的最長無重複字元子串的長度。

map[str[i]]表示之前出現str[i]字元的位置,假設該位置是a。以str[i]結尾的無重複子串必然不包括a位置。

根據pre的定義可知,在以str[i-1]為結尾的情況下,最長無重複子串的長度為(i-1)- pre,此時如果a的位置在pre的右邊,則以str[i]結尾的最長子串的長度為 i - a;如果a的位置在pre的左邊,則以str[i]結尾的最長子串的長度為i - pre。這個問題畫個圖就很直觀了,這裡不多解釋。

計算完長度以後,pre位置和a位置哪乙個在右邊就作為新的pre的值。然後去計算下乙個位置的字元,整個過程用length儲存出現的最大值。

def maxlengthstr(str1):

if str1 == none or str1 == '':

return 0

map_ = {}

pre = -1

for i in range(len(str1)):

if str1[i] in map_:

pre = max(pre,map_[str1[i]])

length = max(length,i-pre)

map_[str1[i]] = i

return length

maxlengthstr("abcd")

maxlengthstr("aabcb")

找到字串的最長無重複字元子串

給定乙個字串s,返回s的最長無重複字元子串的長度。例如 記錄每個字元前一次出現的位置positios,及到當前字元滿足不重複子串的前乙個位置prev,遍歷字串過程,遍歷到位置i,字元為c,positions c 為前乙個c出現的位置記為prev c,用prev c跟prev比較,如果大於prev,則...

找到字串的最長無重複字元子串

找到字串的最長無重複字元子串 給定乙個陣列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表示某...