如何在Python中查找字符串中最长的重复序列?


为了在Python中找到字符串中最长的重复序列,我们可以使用以下方法:

遍历字符串的每个字符,并将其与下一个字符进行比较。

如果它们相同,我们可以增加一个计数器变量并继续与下一个字符进行比较。

如果它们不同,我们检查计数器是否大于到目前为止找到的最长重复序列的长度。如果是,则更新最长重复序列。

将计数器重置为1,并继续处理字符串中的下一个字符。

这里有三个代码示例,并附带分步说明

使用循环查找字符串中最长的重复序列

示例

我们首先将longest_sequence、sequence和prev_char变量初始化为空字符串。

我们使用for循环遍历字符串中的每个字符。

如果当前字符与前一个字符相同,则将其添加到sequence字符串中。

如果当前字符与前一个字符不同,我们检查sequence字符串的长度是否大于到目前为止找到的最长longest_sequence字符串的长度。如果是,则更新longest_sequence字符串。

然后我们将sequence字符串重置为当前字符,并继续处理字符串中的下一个字符。

循环完成后,我们最后一次检查sequence字符串的长度是否大于到目前为止找到的最长longest_sequence字符串的长度。如果是,则使用sequence字符串更新longest_sequence字符串。

最后,我们打印出longest_sequence字符串。

string = "abbbbcddeeeeee"
longest_sequence = ""
sequence = ""
prev_char = ""

for char in string:
    if char == prev_char:
        sequence += char
    else:
        if len(sequence) > len(longest_sequence):
            longest_sequence = sequence
        sequence = char

    prev_char = char

if len(sequence) > len(longest_sequence):
    longest_sequence = sequence

print("Longest repetitive sequence:", longest_sequence)

输出

Longest repetitive sequence: eeeeee

使用itertools模块中的groupby函数

示例

我们从itertools模块导入groupby函数。

我们定义要检查最长重复序列的字符串。

我们将longest_sequence变量初始化为空字符串。

我们使用groupby函数循环遍历字符串中的字符,该函数将连续的字符组合在一起。

对于每组连续字符,我们将它们连接成一个sequence字符串。

如果sequence字符串的长度大于到目前为止找到的最长longest_sequence字符串的长度,则更新longest_sequence字符串。

循环完成后,我们打印出longest_sequence字符串。

from itertools import groupby

string = "abbbbcddeeeeee"

longest_sequence = ""
for char, group in groupby(string):
    sequence = "".join(list(group))
    if len(sequence) > len(longest_sequence):
        longest_sequence = sequence

print("Longest repetitive sequence:", longest_sequence)

输出

Longest repetitive sequence: eeeeee

示例

字符串s包含一系列长度递增的重复序列。

我们初始化一个空字符串max_seq来保存最长的重复序列。

我们使用嵌套循环来迭代s中的每个字符。

对于每个字符,我们启动一个包含该字符的新序列(seq)。

然后我们迭代s中剩余的字符,检查每个字符是否与我们当前序列的第一个字符匹配。

如果匹配,我们将其添加到序列中;如果不匹配,我们退出循环。

每个序列完成后,我们检查它是否比当前的max_seq长,并相应地更新max_seq。

最后,我们打印最长的重复序列。

s = "abbcccddddeeeeeffffff"
max_seq = ''
for i in range(len(s)):
    seq = s[i]
    for j in range(i+1, len(s)):
        if s[j] == s[i]:
            seq += s[j]
        else:
            break
    if len(seq) > len(max_seq):

        max_seq = seq
print(max_seq)

输出

ffffff

示例

这种方法类似于前面的示例,但我们不是逐个字符地检查,而是比较长度递增的子字符串。

我们使用两个嵌套循环来迭代s中每个可能的子字符串对。

对于每对子字符串,我们检查它们是否相等。

如果相等,我们用较长的子字符串更新max_seq。

s = "abcdee"
max_seq = ''
for i in range(len(s)):
    for j in range(i+1, len(s)):
        if s[j:j+i+1] == s[i:j]:
            max_seq = s[i:j]
print(max_seq)

输出

e

示例

这种方法使用split()函数将字符串分割成子字符串列表,使用第一个字符作为分隔符。

我们在字符串末尾添加一个分隔符,以确保包含最后一个子字符串。

然后我们使用max()函数找到列表中最长的子字符串,并从两端切掉分隔符字符。

最后,我们打印最长的重复序列。

s = "aabbbcddddeeeefffffff"
max_seq = max((s+'$').split(s[0]), key=len)[1:-1]
print(max_seq)

输出

bbcddddeeeefffffff

更新于:2023年8月10日

2K+ 浏览量

开启你的职业生涯

完成课程获得认证

开始学习
广告