输入一个字符串(只包含 a~z 的字符),求其最长不含重复字符的子字符串的长度。例如对于 arabcacfr,最长不含重复字符的子字符串为 acfr,长度为 4。
解题思路
遍历字符串中的每一个元素。借助一个辅助键值对来存储某个元素最后一次出现的下标。用一个整形变量存储当前无重复字符的子串开始的下标。
class Solution:
def lengthOfLongestSubstring(self, s):
# write your code here
res = 0
if s is None or len(s) == 0:
return res
d = {}
tmp = 0
start = 0
for i in range(len(s)):
# 出现重复字符,而且重复字符在start后面
# 'ydgwdy'第二次出现y时,start已经越过第一个y了,不认为是重复
if s[i] in d and d[s[i]] >= start:
start = d[s[i]] + 1
# 在此次循环中,最大的不重复子串的长度
tmp = i - start + 1
d[s[i]] = i
res = max(res, tmp)
return res