मान लीजिए हमारे पास दो स्ट्रिंग्स s और t हैं। हमें merge नामक एक स्ट्रिंग बनानी है निम्न तरीके से: जब तक s या t नॉन-खाली हैं, निम्नलिखित विकल्पों में से एक चुनें:
- यदि
sनॉन-खाली है, तोsके पहले कैरेक्टर कोmergeमें जोड़ें और उसेsसे हटा दें। - यदि
tनॉन-खाली है, तोtके पहले कैरेक्टर कोmergeमें जोड़ें और उसेtसे हटा दें।
हमें लेक्सिकोग्राफिकली सबसे बड़ा मर्ज ढूंढना है जो हम बना सकते हैं।
उदाहरण के लिए, यदि इनपुट s = "zxyxx", t = "yzxxx" है, तो आउटपुट zyzxyxxxxx होगा, क्योंकि:
sसे चुनें:merge = "z",s = "xyxx",t = "yzxxx"tसे चुनें:merge = "zy",s = "xyxx",t = "zxxx"tसे चुनें:merge = "zyz",s = "xyxx",t = "xxx"sसे चुनें:merge = "zyzx",s = "yxx",t = "xxx"sसे चुनें:merge = "zyzxy",s = "xx",t = "xxx"
फिर s और t से शेष 5 x's को मर्ज के अंत में जोड़ें।
हल करने के चरण
ans :=खाली स्ट्रिंगidx1 := 0,idx2 := 0idx1 < len(s)औरidx2 < len(t)तक व्हाइल लूप चलाएं:- यदि
s[idx1] > t[idx2]या (s[idx1] == t[idx2]औरs[idx1:] >= t[idx2:]), तो:ans := ans + s[idx1]idx1 := idx1 + 1
- अन्यथा जब
s[idx1] < t[idx2]या (s[idx1] == t[idx2]औरs[idx1:] <= t[idx2:]), तो:ans := ans + t[idx2]idx2 := idx2 + 1
- यदि
ans + s[idx1:] + t[idx2:]वापस करें।
उदाहरण
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
def solve(s, t):
ans = ""
idx1 = idx2 = 0
while idx1 < len(s) and idx2 < len(t):
if s[idx1] > t[idx2] or (s[idx1] == t[idx2] and s[idx1:] >= t[idx2:]):
ans += s[idx1]
idx1 += 1
elif s[idx1] < t[idx2] or (s[idx1] == t[idx2] and s[idx1:] <= t[idx2:]):
ans += t[idx2]
idx2 += 1
return ans + s[idx1:] + t[idx2:]
s = "zxyxx"
t = "yzxxx"
print(solve(s, t))
इनपुट
"zxyxx", "yzxxx"
आउटपुट
zyzxyxxxxx