主要思路
滑动窗口,记录下当前出现过的所有字符出现的最后一次的位置
在遇到下一个字符的时候,只可能存在两种情况:
- 在当前存的字符串里还未出现过——>直接加上
- 在当前存的字符串里还未出现过——>去掉这个重复出现的字符的上一次出现,从它的后一位开始重新计算(因为随时对当前暂存的字符串与最长子串进行比较,所以之前的直接舍弃也没有关系)
class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
left = 0
right = 0
max_sub = ''
dic = dict()
for i in range(len(s)):
if s[i] not in s[left:right]:
right +=1
else:
left = dic[s[i]]+1
right += 1
if right-left > len(max_sub):
max_sub = s[left:right]
dic[s[i]] = i
return len(max_sub)
if __name__=='__main__':
s = 'pwwkew'
print(Solution().lengthOfLongestSubstring(s))