Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm độ dài của quá trình phân hủy palindrome dài nhất bằng Python

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