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