Giả sử chúng ta có một văn bản. Ta phải tìm k lớn nhất có thể sao cho tồn tại a [1], a [2], ..., a [k] sao cho:Mỗi a [i] là một chuỗi không trống. Và nối của chúng a [1] + a [2] + ... + a [k] bằng đoạn văn đã cho; Đối với tất cả các i trong phạm vi từ 1 đến k, a [i] =a [{k + 1 - i}].
Vì vậy, nếu đầu vào là text ="antaprezatepzapreanta", thì đầu ra sẽ là 11 vì chúng ta có thể chia nó như "a | nt | a | pre | za | tpe | za | pre | a | nt | a".
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
bộ đếm:=0
-
i:=1, j:=size của văn bản - 1
-
ic:=0, jc:=kích thước của văn bản
-
trong khi tôi <=j, làm
-
nếu chuỗi con của văn bản [từ chỉ mục ic đến i-1] giống với chuỗi con của văn bản [từ chỉ mục j đến jc-1], thì
-
bộ đếm:=bộ đếm + 2
-
ic:=i
-
jc:=j
-
-
i:=i + 1
-
j:=j - 1
-
-
nếu ic không giống jc thì
-
bộ đếm:=bộ đếm + 1
-
-
quầy trả hàng
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau đây để hiểu rõ hơn
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)) Đầu vào
[3,4,5,2,1,7,3,4,7], 3
Đầu ra
11