Leetcode-3无重复字符的最长子串

思路

使用一个idx指明当前子串的开始位置

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        m = dict()

        '''
        对于每一个char c 如果没出现 continue
        出现了:
            在当前字串的索引之前:continue
            之后: map出现位置之后一位
        '''
        idx = 0
        res = 0
        for i , c in enumerate(s):
            if c not in m:
                pass
            else:
                if m[c] < idx:
                    pass

                else:
                    res = max(res , i - idx)
                    idx = m[c] + 1
            m[c] = i
            print(res , i - idx + 1)
            res = max(res , i - idx + 1)
        return res

优化

提取有用的条件分支

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        m = dict()
        
        idx = 0
        res = 0
        for i , c in enumerate(s):
            if c in m and m[c] >= idx:
                res = max(res , i - idx)
                idx = m[c] + 1
                
            m[c] = i
            res = max(res , i - idx + 1)
        return res

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理