Suppose we have two strings s and t. We want to form a string called merge in the following way: while either s or t are non-empty, select one of the following options −
If s is non-empty, then append the first character in s to merge and delete it from s.
If t is non-empty, then append the first character in t to merge and delete it from t.
Finally, we have to find the lexicographically largest merge that we can form.
So, if the input is like s = "zxyxx" t = "yzxxx", then the output will be "zyzxyxxxxx"
To solve this, we will follow these steps −
a := 0, b := 0
merge := blank string
W1 := size of s
W2 := size of t
while a < W1 and b < W2, do
if substring of s from index a to end > substring of t from index b to end, then
merge := merge concatenate s[a]
a := a + 1
otherwise,
merge := merge concatenate t[b]
b := b + 1
return merge concatenate (substring of s from index a to end) concatenate (substring of t from index b to end)
Example
Let us see the following implementation to get better understanding −
def solve(s, t): a = b = 0 merge = "" W1 = len(s) W2 = len(t) while a < W1 and b < W2: if s[a:] > t[b:]: merge += s[a] a += 1 else: merge += t[b] b += 1 return merge + s[a:] + t[b:] s = "zxyxx" t = "yzxxx" print(solve(s, t))
Input
"zxyxx", "yzxxx"
Output
zyzxyxxxxx