मान लीजिए कि हमारे पास दो तार s और t हैं। हमें निम्नलिखित तरीके से मर्ज नामक एक स्ट्रिंग बनानी होगी:जबकि या तो s या t गैर-रिक्त हैं, निम्न विकल्पों में से एक का चयन करें -
-
यदि s गैर-रिक्त है, तो पहले वर्ण को s में मर्ज करने के लिए संलग्न करें और इसे s से हटा दें।
-
यदि t गैर-रिक्त है, तो t में पहले वर्ण को मर्ज करने के लिए संलग्न करें और इसे t से हटा दें।
इसलिए हमें शब्दावली की दृष्टि से सबसे बड़ा मर्ज ढूंढना होगा जो हम बना सकते हैं।
इसलिए, यदि इनपुट s ="zxyxx" t ="yzxxx" जैसा है, तो आउटपुट zyzxyxxxxx होगा, क्योंकि
-
s में से चुनें:मर्ज ="z", s ="xyxx", t ="yzxxx"
-
t से चुनें:मर्ज ="zy", s ="xyxx", t ="zxxx"
-
t से चुनें:मर्ज ="zyz", s ="xyxx", t ="xxx"
-
s से चुनें:मर्ज ="zyzx", s ="yxx", t ="xxx"
-
s से चुनें:मर्ज ="zyzxy", s ="xx", t ="xxx"
फिर मर्ज के अंत में s और t से शेष 5 x जोड़ें।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
उत्तर:=रिक्त स्ट्रिंग
-
idx1 :=0, idx2 :=0
-
जबकि idx1
-
अगर s[idx1]> t[idx2] या (s[idx1] t[idx2] के समान है और s का विकल्प [इंडेक्स idx1 से अंत तक]>=t का सबस्ट्रिंग [इंडेक्स idx2 से अंत तक]), तोपी>
-
ans :=ans concatenate s[idx1]
-
idx1 :=idx1 + 1
-
-
अन्यथा जब s[idx1]
-
ans :=ans concatenate t[idx2]
-
idx2 :=idx2 + 1
-
-
-
वापसी ans concatenate s [इंडेक्स idx1 से अंत तक] concatenate 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))
इनपुट
[7,4,5,3,8], [[0,2,2],[4,2,4],[2,13,100]]
आउटपुट
zyzxyxxxxx