如何在 Python 中判斷字串是否自身重複?


在本文中,我們將瞭解如何在 Python 中判斷字串是否自身重複。

第一種方法是使用切片和find()函式。我們想要檢視給定的字串是否完全由其子字串的重複構成。我們可以透過在一個字串對中查詢字串的旋轉來確認這一點。

在新增一個字串並在該字串中檢查根字串(除了最後一個和第一個字元)後,我們可以搜尋根字串。這種方法不適用於長度小於 2 的字串。

示例 1

在下面給出的示例中,我們以字串作為輸入,並使用切片和find()方法檢查它是否重複

def find_period(s):
   i = (s+s).find(s, 1, -1)
   return None if i == -1 else s[:i]
   
str1 = '012012012012012'
print("The given string is")
print(str1)

print("Checking if any substring that is repeating")
res = find_period(str1)
print(res)

輸出

上面示例的輸出如下所示

The given string is
012012012012012
Checking if any substring that is repeating
012

示例 2

在下面給出的示例中,我們使用與上面相同的程式,但使用不同的輸入並檢查它是否重複

def find_period(s): 
   i = (s+s).find(s, 1, -1)
   return None if i == -1 else s[:i]
   
str1 = 'abcdefgh'
print("The given string is")
print(str1)

print("Checking if any substring that is repeating")
res = find_period(str1)
print(res)

輸出

上面示例的輸出如下所示

The given string is
abcdefgh
Checking if any substring that is repeating
None

使用暴力破解方法

第二種方法是暴力破解方法,我們將不斷迭代字串並檢查重複序列。這項工作可以透過選擇性切片和暴力破解方法來完成。這是一種原始的字串發現方法,我們嘗試透過重複劃分字串來識別根字串。

示例

在下面給出的示例中,我們以字串作為輸入,並使用列表推導式檢查字串的任何部分是否重複

str1 = '012012012012012'

print("The given string is")
print(str1)

print("Checking if any substring that is repeating")
res = None

for i in range(1, len(str1)//2 + 1):
   if (not len(str1) % len(str1[0:i]) and str1[0:i] *(len(str1)//len(str1[0:i])) == str1):
      res = str1[0:i]
print(res)

輸出

上面示例的輸出如下所示

The given string is
012012012012012
Checking if any substring that is repeating
012

更新於: 2022-12-07

1K+ 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告