3无重复字符的最长子串

在这里插入图片描述
方法一:滑动窗口
以每个字符为开头,寻找无重复字符的最长子串

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        if not s:
            return 0
        start = 0
        res = 0
        for i in range(len(s)):
            if not self.isUnique(s[start:i+1]):
                start+=1
            elif res < i+1-start:
                res = i+1-start
        return res

    def isUnique(self,s):
        strList = list(s)
        for i in range(len(s)):
            if s.count(strList[i]) != 1:
                return False
        return True

方法二:滑动窗口改进
实际上,没有必要寻找以每个字符开头的子串,从重复的字符开始寻找可以节约时间

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        substr = {}
        i,res = 0,0
        for j in range(len(s)):
            if s[j] in substr:
                i = max(substr[s[j]],i)
            res = max(res,j-i+1)
            substr[s[j]] = j+1
        return res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值