无重复字符串的最长字串思路
首先,头指针start的含义是:如果字符串中出现某个字符重复,start便后移至上一次出现这个字符的后面一位,字典中此字符对应的value也会更新为当前字符的索引,总之,保持[start,i]中不存在重复字符,对应下文的:
else:
if dic[cur] + 1 > start:
start = dic[cur] + 1
dic[cur] = i
其次,最大长度length会随着i的+1而判断更新一次,如果start后移,则length不会变,如果start不变,则length+1,对应下文的:
if i - start + 1 > length:
length = i - start + 1
下面是完整代码,可以根据代码后的计算过程对照理解:
class Solution:
def lengthOfLongestSubstring(self, s):
"""
头指针start初始为0
当前指针cur初始为0
最大长度length初始为0
"""
length = 0
start = 0
dic = {}
for i in range(len(s)):
cur = s[i]
if cur not in dic.keys():
dic[cur] = i
else:
if dic[cur] + 1 > start:
start = dic[cur] + 1
dic[cur] = i
if i - start + 1 > length:
length = i - start + 1
return length
if __name__ == '__main__':
s = Solution()
print(s.lengthOfLongestSubstring("abcdabcdaabcde"))
假设字符串为“abcdabcdaabcde”,上图是完整的程序执行过程中各变量的变化历程: