python實現無重複字串的最長子串
阿新 • • 發佈:2018-11-30
給定一個字串,請你找出其中不含有重複字元的
最長子串 的長度。
示例 1:
輸入: "abcabcbb"
輸出: 3
解釋: 因為無重複字元的最長子串是 "abc",所以其
長度為 3。
示例 2:
輸入: "bbbbb"
輸出: 1
解釋: 因為無重複字元的最長子串是 "b"
,所以其長度為 1。
示例 3:
輸入: "pwwkew" 輸出: 3 解釋: 因為無重複字元的最長子串是"wke"
,所以其長度為 3。 請注意,你的答案必須是 子串 的長度,"pwke"
是一個子序列,不是子串。
deflengthOfLongestSubstring(s): """ :type s: str :rtype: int """ # 儲存歷史迴圈中最長的子串長度 max_len = 0 # 判斷傳入的字串是否為空 if s is None or len(s) == 0: return max_len # 定義一個字典,儲存不重複的字元和字元所在的下標 str_dict = {} # 儲存每次迴圈中最長的子串長度 one_max = 0 # 記錄最近重複字元所在的位置+1 start = 0for i in range(len(s)): # 判斷當前字元是否在字典中和當前字元的下標是否大於等於最近重複字元的所在位置 if s[i] in str_dict and str_dict[s[i]] >= start: # 記錄當前字元的值+1 start = str_dict[s[i]] + 1 # print start # 在此次迴圈中,最大的不重複子串的長度 one_max = i - start + 1 # 把當前位置覆蓋字典中的位置str_dict[s[i]] = i # 比較此次迴圈的最大不重複子串長度和歷史迴圈最大不重複子串長度 max_len = max(max_len, one_max) return max_len print lengthOfLongestSubstring('pwwssffasdf')
這裡的解題思路是把字串中的值當做字典的key,把他對應的索引存為字典的value。通過取出的值跟最開始計數的值進行比較找出最大值。