思路數組
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