在y总的做法上稍作改进。
做指针 i
, 右指针j
。
dict的key是s[j]
, value是s[j]
上一次在字符串中出现的index。
每到一个s[j]
,如果已经在dict
中出现过,把i
设为s[j]
上一次出现的index+1,并更新dict[s[j]]
。这里要注意,如果s[j]
上一次出现的index小于当前的i
,则不更新i
。因为我们希望i
也是单调增长的。
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
result = 0
dict = {}
i = 0
for j in range(len(s)):
if s[j] in dict:
if i <= dict[s[j]]:
i = dict[s[j]] + 1
dict[s[j]] = j
result = max(result, j - i + 1)
continue
dict[s[j]] = j
result = max(result, j - i + 1)
return result