[leetcode-python]3. 无重复字符的最长子串(难度:中等)

题目介绍

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

示例 1:

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

示例 2:

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

示例 3:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

我的想法

  • 逐个取出字符,合成新的字符串,如果遇到重复的字符,就计算这时的字符串长度,最后取最大的

我遇到的问题

  1. 当遇到重复字符后,将计数的字符串重置了,前边没有重复字符的一段字符串没加入计数,导致结果错误
  2. 退出循环后,最后得到的字符串的长度没有与当前最大长度比较,导致得到的结果出现错误

解决办法

  1. 找到计数的字符串中重复的字符,将这个字符及前边的字符都删除,保留其后的字符串,继续进行计数
  2. 退出循环后,进行比较

实现代码

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        # 初始化用于计数的字符串及保存最大长度的变量
        r = ''
        length = 0
        # 遍历字符串,找到不重复的字符,进行计数
        for char in s:
            if char not in r:
                r += char
            else:
                if len(r) > length:
                    length = len(r)
                r = r[r.index(char) + 1:] + char
        # 退出循环后,最后得到的字符串再进行比较
        if len(r) > length:
            length = len(r)
        return length

最后结果

在这里插入图片描述


  • 可能有点麻烦,但能力有限,摊手手
  • 鄙人是个菜鸡,我只是将我的想法说出来供大家参考,有什么问题可以提出来,但求各位大佬手下留情,不要喷我



结尾

以上就是我要分享的内容,因为学识尚浅,会有不足,还请各位大佬指正。
有什么问题也可在评论区留言。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值