मान लीजिए कि हमारे पास दो तार 'ए' और 'बी' और एक स्ट्रिंग 'मर्ज' है। कार्य स्ट्रिंग 'मर्ज' को 'ए' और 'बी' के वर्णों से इस तरह से भरना है कि,
- यदि स्ट्रिंग 'ए' गैर-रिक्त है, तो स्ट्रिंग 'ए' से पहले अक्षर को हटा दें और इसे स्ट्रिंग 'मर्ज' में कॉपी करें।
- यदि स्ट्रिंग 'बी' गैर-रिक्त है, तो स्ट्रिंग 'बी' से पहले अक्षर को हटा दें और इसे स्ट्रिंग 'मर्ज' में कॉपी करें।
- यदि स्ट्रिंग्स 'ए' और 'बी' गैर-रिक्त हैं, तो स्ट्रिंग 'ए' से पहले वर्णों को हटा दें और इसे स्ट्रिंग 'मर्ज' में कॉपी करें और फिर स्ट्रिंग 'बी' से पहले अक्षर (यदि कोई हो) को हटा दें। ' और इसे 'मर्ज' स्ट्रिंग में कॉपी करें।
- दोनों स्ट्रिंग्स से वर्णों को लेक्सिकोग्राफ़िक रूप से हटा दें, जिसका अर्थ है, यदि स्ट्रिंग 'ए' स्ट्रिंग 'बी' से बड़ी है, तो स्ट्रिंग 'ए' से वर्ण हटा दें और फिर स्ट्रिंग 'बी'।
- स्ट्रिंग 'मर्ज' लौटाएं।
उदाहरण के लिए
इनपुट-1:
a = “bacaa”b = “abcaa”
आउटपुट:
babcacaaaa
स्पष्टीकरण:
चूंकि दी गई स्ट्रिंग 'ए' स्ट्रिंग 'बी' से शब्दावली की दृष्टि से बड़ी है, इसलिए हम स्ट्रिंग 'ए' से पहला अक्षर निकालेंगे, यानी, "बी" और फिर स्ट्रिंग 'बी' से। निकालने के बाद, स्ट्रिंग "babcacaaaa" होगी।
इस समस्या को हल करने का तरीका
इस समस्या को हल करने के लिए पुनरावर्ती दृष्टिकोण यह है कि हम स्ट्रिंग 'ए' और स्ट्रिंग 'बी' के प्रत्येक वर्ण को निकालेंगे और जांच करेंगे कि क्या स्ट्रिंग 'ए' के अक्षर अन्य स्ट्रिंग की तुलना में लेक्सिकोग्राफिक रूप से बड़े हैं और अंत में स्ट्रिंग 'मर्ज' से जुड़ते हैं। ।
हम कई पदों के बाद प्रत्येक वर्ण की सबस्ट्रिंग पाएंगे और 'मर्ज' में संयोजित होंगे यदि यह अन्य स्ट्रिंग की तुलना में शब्दावली से बड़ा है।
- दो इनपुट स्ट्रिंग 'ए' और 'बी' लें।
- एक पुनरावर्ती स्ट्रिंग फ़ंक्शन concatenateLargest(string a, string b) इनपुट के रूप में दो स्ट्रिंग लेता है और संयोजन के बाद सबसे बड़ी स्ट्रिंग देता है, यानी, (स्ट्रिंग 'ए' + स्ट्रिंग 'बी')।
- यदि दोनों तार खाली हैं, तो स्ट्रिंग 'ए' + स्ट्रिंग 'बी' लौटाएं।
- यदि स्ट्रिंग 'ए' स्ट्रिंग 'बी' से कम या बराबर है, तो पहले वर्ण को निकालें और अन्य वर्णों के लिए फ़ंक्शन को पुनरावर्ती रूप से कॉल करें।
- यदि स्ट्रिंग 'बी' स्ट्रिंग 'बी' से कम या उसके बराबर है, तो पहले वर्ण को निकालें और अन्य वर्णों के लिए फ़ंक्शन को पुनरावर्ती रूप से कॉल करें।
- सम्मिलित स्ट्रिंग लौटाएं।
उदाहरण
#include <bits/stdc++.h> using namespace std; string concatenateLargest(string a, string b) { if (a.size() == 0 or b.size() == 0) { return (a + b); } if (a <= b) return b[0] + concatenateLargest(a, b.substr(1)); else return a[0] + concatenateLargest(a.substr(1), b); } int main() { string a = "bacaa"; string b = "abcaa"; cout << concatenateLargest(a, b) << endl; return 0; }
उपरोक्त कोड को चलाने से आउटपुट इस प्रकार उत्पन्न होगा,
आउटपुट
bacabcaaaa
दी गई समस्या के अनुसार विलय के बाद दो तार "बका" और "अबका" "बकाबका" बन जाएंगे।