Check whether two strings are equivalent or not according to given condition in Python


Suppose we have two strings s and t of same size. We have to check whether s and t are equivalent or not. There are few conditions to check:

  • They both are equal. Or,
  • If we divide the s into two contiguous substrings of same size and the substrings are s1 and s2 and also divide t same like, s into t1 and t2, then one of the following should be valid:
    • s1 is recursively equivalent to t1 and s2 is recursively equivalent to t2
    • s1 is recursively equivalent to t2 and s2 is recursively equivalent to t1

So, if the input is like s = "ppqp" t = "pqpp", then the output will be True as if we divide s and t into two parts s1 = "pp", s2 = "qp" and t1 = "pq", t2 = "pp", here s1 = t2 and if we divide s2 and t1 into two parts s21 = "q", s22 = "p", t11 = "p", t12 = "q", here also s21 = t12 and s22 = t11, so they are recursively equivalent.

To solve this, we will follow these steps −

  • Define a function util() . This will take s
  • if size of s is odd, then
    • return s
  • left := util(left half part of s)
  • right := util(right half part of s)
  • return minimum of (left concatenate right), (right concatenate left)
  • From the main method return true when util(s) is same as util(t) otherwise false

Let us see the following implementation to get better understanding −

Example Code

Live Demo

def util(s):
   if len(s) & 1 != 0:
      return s
 
   left = util(s[0:int(len(s) / 2)])
   right = util(s[int(len(s) / 2):len(s)])
 
   return min(left + right, right + left)
 
def solve(s,t):
   return util(s) == util(t)

s = "ppqp"
t = "pqpp"
print(solve(s, t))

Input

"ppqp", "pqpp"

Output

True

Updated on: 16-Jan-2021

290 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements