class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
exitMap = {} # 记录已经存在的数据内容
start = 0
count, maxleng = 0, 0
for index, i in enumerate(s):
if exitMap.get(i, -1) == -1: # 赋值目前未知的元素的位置
exitMap[i] = index
else:
count = index - start # 如果遍历到的数据已经存在,那么再次出现的数据的索引位置减去当前子串最开始的位置的长度就是目前无重复子串的长度
if exitMap[i] + 1 > start: # 判断当前重复子串的原来位置是否在当前需要判定的子串的起始位置之后,如果是之前那么久可以忽略
start = exitMap[i] + 1
exitMap[i] = index
if count > maxleng:
maxleng = count
if len(s)-start > maxleng: # 最后判断源字符串的长度减去目前子串的起始位置
maxleng = len(s)-start
return maxleng