Python 求最大不重复子串

题目:一个字符串,找出不含有重复字符的最长子串的长度。

例子: 假定给出字符串:"mabcafrab" , 那么它的最长不重复子串是“bcafr”

           加入给出是“aaaaaaaa”,那么它的最长不重复是“a”

 

思路: 设置一个字典类型,dic{当前字符, 当前字符的位置}, 初始为{}, 判断字符串字符,如果字符不在dic中,则把这个字符加入,{'m':0}, 同时如果当前位置的字符所在的value大于等于start 值,则把start 置为value+1. 比如上例中, 到第5个字符‘a’时,dic['a']其实是 1.那么我们需要把start 设置为1+1,start 从b开始,就是说重复的我们暂时摒弃了。这种情况dic['a'] = 4, 在这次计算中。字符长度是i-start+1. 比较max_len 和当前i-start+1的大小。赋值给max_len

 

def maxlengthofSubstring(s):

    max_len =0
    
    dic = {}

    flag_len = 0

    start = 0

    if s is None or len(s)==0:

        return 0

    for i in range(len(s)):

        if(s[i] in dic and dic[s[i]]>=start):
            start = dic[s[i]]+1

        flag_len = i- start +1
        dic[s[i]] = i

        max_len= max(max_len, flag_len)

        print(dic, start, max_len)

    return max_len

print(maxlengthofSubstring("mabcafrab"))

{'m': 0} 0 1
{'m': 0, 'a': 1} 0 2
{'m': 0, 'a': 1, 'b': 2} 0 3
{'m': 0, 'a': 1, 'b': 2, 'c': 3} 0 4
{'m': 0, 'a': 4, 'b': 2, 'c': 3} 2 4
{'m': 0, 'a': 4, 'b': 2, 'c': 3, 'f': 5} 2 4
{'m': 0, 'a': 4, 'b': 2, 'c': 3, 'f': 5, 'r': 6} 2 5
{'m': 0, 'a': 7, 'b': 2, 'c': 3, 'f': 5, 'r': 6} 5 5
{'m': 0, 'a': 7, 'b': 8, 'c': 3, 'f': 5, 'r': 6} 5 5
5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值