मान लीजिए कि हमारे पास दो तार s और t हैं। हम निम्नलिखित तरीके से मर्ज नामक एक स्ट्रिंग बनाना चाहते हैं:जबकि या तो s या t गैर-रिक्त हैं, निम्न विकल्पों में से एक का चयन करें -
-
यदि s गैर-रिक्त है, तो पहले वर्ण को s में मर्ज करने के लिए संलग्न करें और इसे s से हटा दें।
-
यदि t गैर-रिक्त है, तो t में पहले वर्ण को मर्ज करने के लिए संलग्न करें और इसे t से हटा दें।
अंत में, हमें शब्दावली की दृष्टि से सबसे बड़ा मर्ज ढूंढना होगा जिसे हम बना सकते हैं।
इसलिए, यदि इनपुट s ="zxyxx" t ="yzxxx" जैसा है, तो आउटपुट "zyzxyxxxxx" होगा
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
ए:=0, बी:=0
-
मर्ज :=रिक्त स्ट्रिंग
-
W1 :=s का आकार
-
W2 :=t का आकार
-
जबकि a
-
यदि अनुक्रमणिका a से अंत तक s का प्रतिस्थापन> t को अनुक्रमणिका b से अंत तक प्रतिस्थापित किया जाए, तो
-
मर्ज :=मर्ज कॉन्टेनेट एस[ए]
-
ए:=ए + 1
-
-
अन्यथा,
-
मर्ज :=मर्ज कॉन्टेनेट टी[बी]
-
बी:=बी + 1
-
-
-
रिटर्न मर्ज कॉन्टेनेट (इंडेक्स ए से एंड तक एस का सबस्ट्रिंग) कॉन्टेनेट (इंडेक्स बी से एंड तक टी का सबस्ट्रिंग)
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
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))
इनपुट
"zxyxx", "yzxxx"
आउटपुट
zyzxyxxxxx