3. 无重复字符的最长子串(python实现)

版权声明:@author:geek_aaron https://blog.csdn.net/weixin_39433783/article/details/82970701

在这里插入图片描述
思路
遍历字符串中的每一个元素。用一个字典str_dict来存储不重复的字符和字符所在的下标。用变量start存储当前 最近重复字符所在的位置+1
代码

class Solution:
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        # 存储历史循环中最长的子串长度
        max_len = 0
        # 判断传入的字符串是否为空
        if s is None or len(s) == 0:
            return max_len
        # 定义一个字典,存储不重复的字符和字符所在的下标
        str_dict = {}
        # 存储每次循环中最长的子串长度
        one_max = 0
        #记录最近重复字符所在的位置+1
        start = 0
        for i in range(len(s)):
            # 判断当前字符是否在字典中和当前字符的下标是否大于等于最近重复字符的所在位置
            if s[i] in str_dict and str_dict[s[i]] >= start:
                # 记录当前字符的值+1
                start = str_dict[s[i]]
            # 在此次循环中,最大的不重复子串的长度
            one_max = i - start+1
            # 把当前位置覆盖字典中的位置
            str_dict[s[i]] = i
            # 比较此次循环的最大不重复子串长度和历史循环最大不重复子串长度
            max_len = max(max_len, one_max)
        return max_len

参考:https://blog.csdn.net/chenhua1125/article/details/80341570

猜你喜欢

转载自blog.csdn.net/weixin_39433783/article/details/82970701
今日推荐