link:https://leetcode.com/problems/longest-substring-without-repeating-characters/description/
Given a string, find the length of the longest substring without repeating characters.
Example 1:
Input: "abcabcbb" Output: 3 Explanation: The answer is "abc", which the length is 3.
Example 2:
Input: "bbbbb" Output: 1 Explanation: The answer is "b", with the length of 1.
Example 3:
Input: "pwwkew" Output: 3 Explanation: The answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequence and not a substring.
class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
maxlen=0
d={}
start=0
for i,c in enumerate(s):
if c not in d or d[c]<start :
maxlen=max(maxlen,i+1-start)
else:
start=d[c]+1
d[c]=i
return maxlen
用一个map记录字符的下标,类似于滑动窗口的方法来记录,以abcabcbb为例,当滑动到第二个a的时候更新start的位置,将第一个a从记录中去除。
注意d[c]<start是必要的,如tmmzuxt中,当到第二个t的时候,d[t]=0,而此时start已经更新到了后面,如果没有这个判断就不会把第二个t包括进最大长度中了