如何在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+瀏覽量

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.