leetcode 每日一题 3. 无重复字符的最长子串

双指针法

思路:

指针j向前移动遍历字符串,使用字典记录j所指的字符和位置,指针i负责记录当前不含重复字符的起始位置,每当j指向的字符在字典中可以找到时,更新指针i的位置和对应字符的位置,则不含重复字符的子串长度为j-i+1,找到最大值即可。

例如:

abaabcba

 

 

 

代码:

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        st = {}
        i,ans = 0,0
        for j in range(len(s)):
            if s[j] in st:
                i = max(st[s[j]],i)
            ans = max(ans,j-i+1)
            st[s[j]] = j+1
        return ans

 

posted @ 2020-04-15 13:32  nil_f  阅读(71)  评论(0)    收藏  举报