【LeetCode】3.无重复字符的最长字串(滑动窗口)

本文探讨了两种不同的字符串匹配算法,初始方法使用O(n^2)的时间复杂度进行循环比较,但因效率低下而被放弃。随后,作者改进了算法,采用O(n)的时间复杂度,显著提高了性能。通过对比两种方法,文章详细介绍了如何避免重复计算,以及如何更有效地处理字符串中的重复字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

刚开始的方法是进行n此循环

每次都从头找最长的一串找到后就切割下来然后比对一下 时间复杂度是O(n^2)

但是失败了 说是时间超标

以下是代码

 

class Solution:
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        # 转化成list
        z = list(s)
        # 最大长度
        max_length=0
        
        # 切到最后一个停止
        while(len(z)!=1):
            # 临时列表
            temp=[]
            # 长度
            temp_length=0

            for i in range(len(z)):
                # 出现重复
                if z[i] in temp:
                    max_length=temp_length if temp_length>max_length else max_length
                    break
                else:
                    temp.append(z[i])
                    temp_length+=1
            z=z[temp_length:]
        return max_length

改用了方法 没想到连错好几次

以下是最终代码  时间复杂度为O(n)

#第二种
class Solution:
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        # 转化成list
        z = list(s)
        # 最大长度
        max_length=0
        temp_z=[]
        temp_length=0
        for i in range(len(z)):
            if z[i] not in temp_z:
                temp_z+=z[i]
                temp_length+=1
            else:
                # 这里犯得失误很多 一开始没有把当前这个字符放入临时列表中
                max_length=temp_length if temp_length>max_length else max_length
                # 从重复字母的后一个开始重新计算长度
                index=temp_z.index(z[i])
                temp_z=temp_z[index+1:]
                temp_z+=z[i]
                temp_length=len(temp_z)
        #考虑只有一个字符的字符串
        if(temp_length>max_length):
            max_length=temp_length
        return max_length


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值