首先,頭指標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 這種字串字串問題,經常用到滑動...