Leetcode_03【无重复字符的最长字串】

文章目录:

  • 题目
  • 效果展示
  • 脚本及注释
  • 脚本逻辑

题目:

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
  请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。


效果展示:


脚本及注释:

#conding:gbk
str = 'abcabcc'
list1 = list(str)          #将字符串转换为列表
long_list = []            #创建一个空的列表用于存储无重复字符串的长度
zidian = {}              #创建一个空字典用于遍历对比
for i,j in enumerate(list1):   #使用枚举的方法遍历字符串列表
    if j in zidian:         #当字典存在值为"j"的键时进入判断
        changd = i - min(zidian.values())  #获取当前无重复字符串的长度
        num = zidian[j]             #获取键为"j"对应的值,称为“定点”
        for ak in list(zidian.items()):      #由于不能在遍历字典过程中修改字典,所以使用list方法临时将字典转换为列表,注意:items和keys、values转换的结果不一样
            if ak[1] <= num:          #如果字典元素的值少于或等于定点的值,进入判断
                del zidian[ak[0]]        #删除字典中此元素
        long_list.append(changd)        #在空列表中增加当前无重复字符串的长度
        zidian[j] = i               #将新的列表元素添加到字典中
    else:                #如果字典不存在键为“j”,则将遍历对象的索引号及元素值添加到字典中   【此方法沿用了笔者上一条博客中的习惯】
        zidian[j] = i         
long_list.append(len(zidian))    #遍历完成后,计算字典中还存在的元素个数,并添加到存储长度的列表中
print(max(long_list))         #获取列表中最大的值即为目标字符串的最长无重复字符串的长度
class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        list1 = list(s)
        long_list = []
        zidian = {}
        for i,j in enumerate(list1):
            if j in zidian:
                changd = i - min(zidian.values())
                num = zidian[j]
                for ak in list(zidian.items()):
                    if ak[1] <= num:
                        del zidian[ak[0]] 
                long_list.append(changd)
                zidian[j] = i
            else:
                zidian[j] = i
        long_list.append(len(zidian))
        return(max(long_list))
提交leetcode的脚本

脚本逻辑:

  • 同样是使用"空桶理论",对原字符串字符进行遍历,并在遍历过程中与空桶元素进行对比
  • 对比过程中主要有以下几种情况:
    1. 空桶中没有遍历元素,则添加到空桶中
    2. 空桶中存在遍历元素,则先计算出当前最长的无重复字符串,然后将空桶中的某些元素剔除,最后把遍历元素添加到空桶中
    3. 遍历结束后,空桶的元素个数也为一个无重复字符串
  • 使用python处理好以上几种情况即可

猜你喜欢

转载自www.cnblogs.com/mailong/p/11995730.html