如何仅计算给定字符串中的连续重复子字符串

2024-09-26 18:15:39 发布

您现在位置:Python中文网/ 问答频道 /正文

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

输入:sequence=agatabatagataagataagata

输入:sub=agata

产出:3

这是要求的输出,但我的程序给出了4。我如何忽略非重复的输出

有人请带我到这里来


Tags: in程序lenreturndefcountfindsequence
2条回答

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

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

这将打印:3

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

s = "agatabttagataagataagatagatabagata"
sub = "agata"

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

print(counts)

这就产生了3

相关问题 更多 >

    热门问题