[Leecode刷题]3. 无重复字符的最长子串

[Leecode刷题]3. 无重复字符的最长子串

题目介绍

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

示例 1:

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

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

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

自己的想法

看完题后我能想到的方法就是:
设置一个空列表,循环把字符串从头开始加入到列表,如果遇到重复的字符则把列表赋值给新的字符串,然后清空列表,从重复字符开始继续向后遍历。再遇到重复数字时把长度和新字符串的长度对比,如果比新字符串长度长,则替换新字符串,最后输出新字符串的长度。

尝试实现一下:

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        list1 = []
        str_new = ''
        str_count = 0
        if s:
            for i in range(len(s)-1):
                if s[i] not in list1:
                    list1.append(s[i])
                    str_count = max(len(str_new),len(list1)) 
                if s[i+1] in list1: 
                    if len(str_new)<len(list1):
                        str_new = ''.join(list1)
                        list1 = []
                        list1.append(s[i])
                        str_count = max(len(str_new)-1,len(list1)) 

            
            if s[-1] not in list1:
                list1.append(s[-1])
                str_count += 1
                str_new = ''.join(list1)
            str_count = len(str_new)
        return str_count

暴力解决问题。。但是提交的时候发现这种方式只对于部分测试是有效的,尝试改了几次之后发现没有办法满足所有测试。果然暴力还是不能解决问题。

去看了答案,居然有这么多方法。。(捂脸痛哭)
https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/wu-zhong-fu-zi-fu-de-zui-chang-zi-chuan-cshi-xian-/
先去研究一下,有机会再回来更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值