Given a string, find the length of the longest substring without repeating characters.code
Examples:索引
Given "abcabcbb", the answer is "abc", which the length is 3.字符串
Given "bbbbb", the answer is "b", with the length of 1.string
Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequence and not a substring.it
給定一個字符串,找出不含有重複字符的最長子串的長度。io
示例:class
給定 "abcabcbb" ,沒有重複字符的最長子串是 "abc" ,那麼長度就是3。object
給定 "bbbbb" ,最長的子串就是 "b" ,長度是1。im
給定 "pwwkew" ,最長子串是 "wke" ,長度是3。請注意答案必須是一個子串,"pwke" 是 子序列 而不是子串數據
思路:準備一個dict來存儲每一個字母最新的位置,出現重複的則記錄下該字母的
通俗版
class Solution(object): def lengthOfLongestSubstring(self,s): temp = res = '' for item in s: if item not in temp: temp += item if len(temp) > len(res): res = temp else: i = temp.index(item) # 找到該數據對應的索引 if i == len(temp) - 1: # 若是找到尾部了 temp = item # 從新複製temp else: temp = temp[i + 1:] + item return len(res)
下面是最簡潔版的
def lengthOfLongestSubstring(s): d = {} start = 0 ans = 0 for i,c in enumerate(s): if c in d: start = max(start,d[c] + 1) # abba d[c] = i ans = max(ans,i - start + 1) return ans print(lengthOfLongestSubstring('pwwkew'))