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

Sự phân hủy Palindrome dài nhất ở trăn

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 rỗng; Nối a [1] + a [2] + ... + a [k] của chúng 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 giống như "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 -

  • start:=0, end:=độ dài văn bản - 1

  • khởi tạo temp1 và temp2 bằng chuỗi trống

  • ans =1 khi độ dài của văn bản là lẻ, ngược lại là 0

  • trong khi bắt đầu

    • temp1:=temp1 + text [start]

    • temp2:=text [end] + temp2

    • nếu temp1 giống với temp2 thì -

      • đặt temp1 và temp2 dưới dạng chuỗi trống

      • ans:=ans + 2

    • start:=start + 1

    • end:=end - 1

  • nếu độ dài văn bản là chẵn và (temp1 hoặc temp2 không trống)

    • ans:=ans + 1

  • trả lại ans

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

class Solution(object):
   def longestDecomposition(self, text):
      start = 0
      end = len(text)-1
      temp1 = ""
      temp2 = ""
      ans = 1 if len(text) & 1 else 0
      while start<end:
         temp1+=text[start]
         temp2 = text[end]+temp2
         if temp1 == temp2:
            temp1 = temp2 = ""
            ans+=2
         start+=1
         end-=1
      if len(text)%2 == 0 and(temp1 or temp2):
         ans += 1
      return ans
ob = Solution()
print(ob.longestDecomposition("antaprezatepzapreanta"))

Đầu vào

"antaprezatepzapreanta"

Đầu ra

11