Python算法1:最长不含重复字符的子字符串(动态规划 / 哈希表)

class Solution:
    def get_length_by_longest_substring(self, s:str)-> int:
        res, tmp = 0, 0
        dic = {}
        # res: 存储最长长度
        # tmp: 当前窗口的长度
        # j: 当前遍历的字符的位置
        # i: 当前遍历的字符的上个位置, 默认没出现过就是-1
        # dic: 维护每个字符的最后出现的位置

        for j in range(len(s)):
            i = dic.get(s[j], -1)
            dic[s[j]] = j 

            if tmp < j - i: 
                tmp += 1
            else:
                tmp = j - i 
            res = max(res, tmp)         
        return res 

s = "abcabcdbb"
res = Solution().get_length_by_longest_substring(s)
print(res) # 4

时间复杂度:O(n)
空间复杂度:O(1)

你可能感兴趣的:(Python算法1:最长不含重复字符的子字符串(动态规划 / 哈希表))