【问题标题】:How to count only the continuous repetitive sub-string in a given string python如何仅计算给定字符串python中的连续重复子字符串
【发布时间】:2020-05-22 07:30:30
【问题描述】:
def count_overlapping(sequence, sub):
    counts = 0
    n = len(sub)
    while sub in sequence:
        counts += 1
        sequence = sequence[(sequence.find(sub) + n-1):]
    return counts

输入:序列 = agatabttagataagataagatagatabagata

输入:sub = agata

输出:3

这是必需的输出,但我的程序给出了 4.如何忽略不重复的输出。

请有人在这里指导我。

【问题讨论】:

  • 我找到了这个,认为它对stackoverflow.com/questions/41077268/…有帮助
  • 这个问题的表述确实不清楚,部分自相矛盾。你的意思是你正在寻找子串最长的连续出现系列?或者究竟是什么?两个回答者已经以两种完全不同的方式阅读它......
  • @ThierryLathuille 抱歉不清楚。我试图找到一个字符串中子字符串的重复次数,但只有那些连续出现的次数。以后我会尽量把我的问题说得更清楚。

标签: python substring


【解决方案1】:

最简单但效率不高的解决方案是每次将子字符串相乘,直到在字符串中找不到它,然后找到最大重复次数:

s = "agatabttagataagataagatagatabagata"
sub = "agata"

counts = 0
while sub * (counts+1) in s:
    counts += 1

print(counts)

这给出了3

【讨论】:

    【解决方案2】:

    这是一种基于正则表达式的方法,它使用re.sub 删除子字符串的所有重复组。然后,要找到存在的子字符串的数量,我们只需将长度差除以子字符串的长度即可。

    sequence = "agatabttagataagataagatagatabagata"
    out = re.sub(r'(?:agata){2,}', '', sequence)
    num = (len(sequence) - len(out)) / len('agata')
    print(num)
    

    打印:3

    【讨论】:

    • 非常感谢。我想这也适用于我的问题,但下面的解决方案更适合我的程序。
    • @Drazer 您接受的答案可能比我给您的答案更有效,但如果您喜欢或对正则表达式感到满意,那么这是一个不错的选择。
    猜你喜欢
    • 1970-01-01
    • 2014-11-01
    • 2019-01-12
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多