Python程式:查詢最長塊迴文分解的長度
假設我們有一段文字。我們需要找到最大的k值,使得存在a[1],a[2],…,a[k],滿足以下條件:每個a[i]都是非空字串,並且它們的連線a[1] + a[2] + … + a[k]等於給定的文字;對於所有1到k範圍內的i,a[i] = a[{k+1 - i}]。
例如,如果輸入文字為"antaprezatepzapreanta",則輸出為11,因為我們可以將其分割為"a|nt|a|pre|za|tpe|za|pre|a|nt|a"。
為了解決這個問題,我們將遵循以下步驟:
計數器 := 0
i := 1, j := 文字長度 - 1
ic := 0, jc := 文字長度
當 i <= j 時,執行以下操作:
如果文字從索引ic到i-1的子串與文字從索引j到jc-1的子串相同,則
計數器 := 計數器 + 2
ic := i
jc := j
i := i + 1
j := j - 1
如果ic不等於jc,則
計數器 := 計數器 + 1
返回計數器
示例
讓我們看下面的實現來更好地理解。
def solve(text): counter = 0 i, j = 1, len(text) - 1 ic, jc = 0, len(text) while i <= j: if text[ic:i] == text[j:jc]: counter += 2 ic = i jc = j i += 1 j -= 1 if ic != jc: counter += 1 return counter text = "antaprezatepzapreanta" print(solve(text))
輸入
[3,4,5,2,1,7,3,4,7], 3
輸出
11
廣告