如何在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
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP