题目:
给定一个字符串,找出不含有重复字符的最长子串的长度。
思路:
参考的官方答案3。
设一个滑动窗口[i, j]。和一个字典,键:字符,值:字符s[j]上一次出现位置。
j逐一增加;
i取两者最大值:max( 当前i,s[j] 在字典中的值加1);
最长无重复子串取j-i+1 的最大值;
同时更新字典中键s[j] 的值。
class Solution:
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
char2index = {}
maxlen = 0
i = 0
for j in range(len(s)):
if s[j] in char2index:
i = max(char2index[s[j]] + 1, i)
char2index[s[j]] = j
maxlen = max(j - i + 1, maxlen)
return maxlen