Python找出字符串中的最长重复子串

一个重复字符串是由两个相同的字符串首尾拼接而成,例如abcabc便是长度为6的一个重复字符串,而abcba则不存在重复字符串。 给定任意字符串,请帮小强找出其中的最长重复子串。

str1 = 'abcdiiabcdiierwyqu'
# 设默认的最长重复字符串长度
print('str1:', str1, '长度为:', len(str1))
str1_start = 0
result = 0
for str1_max in reversed(range(0, int(len(str1) / 2))):
    for i in range(0, int(len(str1) / 2 - 1)):
        temp = str1[str1_start + i:str1_max + i]
        if str1.count(temp, str1_start + i, (str1_max + i)*2) == 2:
            result = str1_max
            break
    if result != 0:
        print('重复字符串的最大长度为:', str1_max)
        break

思路:例如字符串str=abcabciif,重复字符串的长度一定不会超过整个字符串长度的一半。注:abcabciif重复字符串的长度为:3
我们只用一个count()函数就可解决这个问题,我们首先假设有一半的字符都重复即len(str)/2,然后我们检测整个字符串中含有前一半字符串的个数,str.count(对比字符串, 对比字符串开始的索引, 对比字符串结束的索引的两倍),只要这个能返回2,就证明对比字符串长度为最长的。具体循环可看代码
result:表示最长重复字符串的长度,即结果
str1_start:对比字符串截取的开始索引;
str1_max:对比字符串的长度,开始时为原字符串的一半;
temp:对比字符串,通过索引在原字符串上截取获得的;

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值