003.無重複字符的最長子串

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'))
相關文章
相關標籤/搜索