Program to split two strings to make palindrome using Python

PythonServer Side ProgrammingProgramming

Suppose we have two strings a and b whose length are same. We have to select an index and split both strings at that selected index, splitting a into two strings: a_pref and a_suff where a = a_pref | a_suff, and splitting b into two strings: b_pref | b_suff (| is concatenation operator) where b = b_pref + b_suff. Check if a_pref + b_suff or b_pref + a_suff forms a palindrome or not. (Any split may be an empty string)

So, if the input is like a = "pqrst" b = "turqp", then the output will be True because we can split a like ["pq", "rst"] and b like ["tu", "rqp"], so if we join a_pref with b_suff, we will get "pqrqp" which is a palindrome.

To solve this, we will follow these steps −

  • for each pair (x, y) from list of pairs [(a, b), (b, a)], do

    • i := 0, j := size of x - 1

    • while x[i] is same as y[j] and i < size of x and j > 0, do

      • i := i + 1

      • j := j - 1

    • midx := substring of x from index i to j

    • midy := substring of y from index i to j

    • if midx is palindrome or midy is palindrome, then

      • return True

  • return False

Example

Let us see the following implementation to get better understanding −

def solve(a, b):
   for x, y in [[a, b], [b, a]]:
      i, j = 0, len(x) - 1
      while x[i] == y[j] and i<len(x) and j>0:
         i += 1
         j -= 1
      midx = x[i:j+1]
      midy = y[i:j+1]
      if (midx == midx[::-1] or midy== midy[::-1]):
         return True
   return False

a = "pqrst"
b = "turqp"
print(solve(a, b))

Input

"pqrst", "turqp"

Output

True
raja
Published on 05-Oct-2021 13:18:34
Advertisements