题目
分析
首先注意到是最长子串 而不是最长子序列。
可以使用滑动窗口,i和j分别指向窗口的两端。使用 一个字典去记录窗口内的值。
如果当前的字符是已经出现过的,那么左边界必须往右移,移动到刚刚没过当前字符的位置。如果当前字符没有出现过,那么移动右边界把这个字符划分到窗口内。每次窗口变化,和最大窗口长度进行比较,并把最大值赋值给最大窗口长度。
python代码
class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
max_len = 0
max_set = set()
i = 0
j = 0
while i<len(s) and j<len(s):
if s[i] not in max_set:
max_set.add(s[i])
i+=1
max_len = max(max_len,i-j)
else:
while s[j]!=s[i]:
max_set.remove(s[j])
j+=1
max_set.remove(s[j])
j+=1
max_set.add(s[i])
i+=1
max_len = max(max_len,i-j)
return max_len