無重複字串的最長字串解題思路

2021-10-04 13:19:28 字數 1259 閱讀 7433

首先,頭指標start的含義是:如果字串**現某個字元重複,start便後移至上一次出現這個字元的後面一位,字典中此字元對應的value也會更新為當前字元的索引,總之,保持[start,i]中不存在重複字元,對應下文的:

else:

if dic[cur] + 1 > start:

start = dic[cur] + 1

dic[cur] = i

其次,最大長度length會隨著i的+1而判斷更新一次,如果start後移,則length不會變,如果start不變,則length+1,對應下文的:

if i - start + 1 > length:  

length = i - start + 1

下面是完整**,可以根據**後的計算過程對照理解:

class solution:

def lengthoflongestsubstring(self, s):

""" 頭指標start初始為0

當前指標cur初始為0

最大長度length初始為0

""" length = 0

start = 0

dic =

for i in range(len(s)):

cur = s[i]

if cur not in dic.keys(

):

dic[cur]

= i

else:

if dic[cur] + 1 > start:

start = dic[cur] + 1

dic[cur]

= i if i - start + 1 > length:

length = i - start + 1

return length

if __name__ ==

'__main__'

: s = solution(

) print(s.lengthoflongestsubstring(

"abcdabcdaabcde"

))

假設字串為「abcdabcdaabcde」,上圖是完整的程式執行過程中各變數的變化歷程:

無重複字串的最長字串

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

無重複字元的最長字串

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

無重複字元的最長字串

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