Longest Chunked Palindrome Decomposition in python


Suppose we have a text. We have to find the largest possible k such that there exists a[1], a[2], ..., a[k] such that: Each a[i] is a non-empty string; Their concatenation a[1] + a[2] + ... + a[k] is equal to the given text; For all i in range 1 to k, a[i] = a[{k+1 - i}].

So, if the input is like "antaprezatepzapreanta", then the output will be 11, because we can split it like "(a)(nt)(a)(pre)(za)(tpe)(za)(pre)(a)(nt)(a)".

To solve this, we will follow these steps −

  • start := 0, end := length of text - 1

  • initialize temp1 and temp2 with empty strings

  • ans = 1 when length of text is odd, otherwise 0

  • while start < end, do −

    • temp1 := temp1 + text[start]

    • temp2 := text[end] + temp2

    • if temp1 is same as temp2, then −

      • set temp1 and temp2 as empty string

      • ans := ans + 2

    • start := start + 1

    • end := end - 1

  • if text length is even and (temp1 or temp2 is not empty)

    • ans := ans + 1

  • return ans

Let us see the following implementation to get better understanding −

Example

 Live Demo

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"))

Input

"antaprezatepzapreanta"

Output

11

Updated on: 04-Jun-2020

136 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements