思路数组
mydict = {} mymax = 0 # start从-1开始是由于有一个特殊的测试用例" ",须要返回的值是1 start = -1 for i in range(len(s)): # 若是遍历到的元素在字典中,说明重复出现了,并且若是这个值上一次出现的位置在start后面,start须要更新 if s[i] in mydict and mydict[s[i]] > start: #字典中旧的值赋给start,即上一次该元素出现的位置,更新字典中这个元素当前的位置 start , mydict[s[i]] = mydict[s[i]] , i else: #若是不在字典中,把这个值加到字典里,value为该元素的下标 mydict[s[i]] = i # i - start为当前无重复的字符串的长度,若是这个长度比记录的最长的值mymax还大,更新mymax if i - start > mymax: mymax = i - start return mymax
class Solution(object): def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ mydict = {} mymax = 0 start = -1 for i in range(len(s)): if s[i] in mydict and mydict[s[i]] > start: start , mydict[s[i]] = mydict[s[i]] , i else: mydict[s[i]] = i if i - start > mymax: mymax = i - start return mymax