天天看點

python回文字元串的所有子回文字元串_查找Python中給定字元串的所有不同回文子字元串...

假設我們有一個帶有小寫ASCII字元的字元串,我們必須找到它的所有不同的連續回文子字元串。

是以,如果輸入類似于“ bddaaa”,則輸出将為[a,aa,aaa,b,d,dd]

為了解決這個問題,我們将遵循以下步驟-m:=新映射

n:= s的大小

矩陣:=生成兩行n為0的數

s:=“ @”串聯s串聯“#”

對于j在0到1的範圍内,執行而s [i-temp-1]與s [i + j + temp]相同,

矩陣[j,i]:=溫度

k:= 1

而(矩陣[j,i-k]與temp-k不相同)并且k

temp:=最高溫度-k,0

i:= i + k

溫度:=溫度+ 1

matrix [j,i + k]:=矩陣[j,ik]的最小值

k:= k + 1溫度:= 0

矩陣[j,0]:= 0

我:= 1

當我<= n時

s:= s從索引1到結束

m [s [0]]:= 1

對于1到n範圍内的i對于溫度範圍,

m [s的子串,從(i-temp-1)到(i-temp-1 + 2 * temp + j)] = 1

對于j在0到1的範圍内,執行

m [s [i]]:= 1

為我每米,做顯示我

示例

讓我們看下面的實作以更好地了解-def find_substr(s):

m = dict()   n = len(s)

matrix = [[0 for x in range(n+1)] for x in range(2)]

s = "@" + s + "#"

for j in range(2):

temp = 0

matrix[j][0] = 0

i = 1

while i <= n:

while s[i - temp - 1] == s[i + j + temp]:

temp += 1

matrix[j][i] = temp

k = 1

while (matrix[j][i - k] != temp - k) and (k 

matrix[j][i+k] = min(matrix[j][i-k], temp - k)

k += 1

temp = max(temp - k, 0)

i += k

s = s[1:len(s)-1]

m[s[0]] = 1

for i in range(1,n):

for j in range(2):

for temp in range(matrix[j][i],0,-1):

m[s[i - temp - 1 : i - temp - 1 + 2 * temp + j]] = 1

m[s[i]] = 1

for i in m:

print (i)

find_substr("bddaaa")

輸入值bddaaa

輸出結果a

aa

b

aaa

d

dd