Program to check is there any permutation that is lexicographically bigger or not between two strings in Python

Suppose we have two strings s and t of the same size, we have to check whether there is some permutation of s, say s1, and permutation of t, say t1, such that: s1[i] ≤ t1[i] for all 0 ≤ i < n or t1[i] ≤ s1[i] for all 0 ≤ i < n.

So, if the input is like s = "vyx" t = "wzx", then the output will be True, as we can have s1 = "vxy" and t1 = "wxz".

To solve this, we will follow these steps −

  • if s and t are empty, then
    • return True
  • s := sort the string s
  • t := sort the string t
  • Define a function util() . This will take s1, s2
  • for i in range 0 to size of s1, do
    • if s1[i] > t1[i], then
      • return False
  • return True
  • From the main method do the following −
  • if util(s, t) is true, then
    • return True
  • swap s and t
  • return util(s, t)

Let us see the following implementation to get better understanding −


 Live Demo

class Solution:
   def solve(self, s, t):
      if not len(s) or not len(t):
         return True
         s = sorted(s)
         t = sorted(t)
   def util(s1, t1):
      for i in range(len(s1)):
         if s1[i] > t1[i]:
            return False
         return True
         if util(s, t):
            return True
      s, t = t, s
      return util(s, t)
ob = Solution()
s = "vyx"
t = "wzx"
print(ob.solve(s, t))


"vyx", "wzx"