मान लीजिए कि हमारे पास दो पूर्णांक A और B हैं, हमें कोई भी स्ट्रिंग S लौटानी है, जैसे -
-
S की लंबाई A + B है और इसमें ठीक A अक्षर 'a' और B संख्या 'b' अक्षर हैं।
-
सबस्ट्रिंग "आआ" और "बीबीबी" स्ट्रिंग एस में नहीं होंगे
इसलिए यदि दिए गए पूर्णांक A =4, B =1 हैं, तो परिणाम "आबा" होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एक स्ट्रिंग रिट परिभाषित करें, प्रारंभ में यह खाली है
-
जबकि |ए-बी|>=2,
-
अगर ए> बी, तो
-
ret :=ret concatenate 'aa'
-
A को 2 से घटाएं
-
अगर बी गैर-शून्य है तो 'बी' को रिट के साथ जोड़ दें और बी को 1 से घटा दें
-
-
अन्य
-
ret :=ret concatenate 'bb'
-
बी को 2 से घटाएं
-
अगर ए गैर-शून्य है तो 'ए' को रिट के साथ जोड़ दें और ए को 1 से घटा दें
-
-
-
जबकि या तो A गैर-शून्य है, या B गैर-शून्य है
-
यदि ए शून्य नहीं है और (रिट का आकार <2 या नहीं (रिट का आकार> =2 और रिट का अंतिम तत्व =रिट का दूसरा अंतिम तत्व) और रिट का अंतिम तत्व 'ए' है), तो
-
रिट :=रिट + 'ए', ए को 1 से घटाएं
-
अगर बी गैर-शून्य है
-
ret :=ret concatenate 'b', B को 1 से घटाएं
-
-
अन्यथा 'बी' को फिर से संयोजित करें, बी को 1 से घटाएं, यदि ए 0 नहीं है, तो ए को रिट के साथ संयोजित करें और ए को 1 से घटाएं
-
-
-
वापसी रिट
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h> using namespace std; class Solution { public: string strWithout3a3b(int A, int B) { string ret = ""; while(abs(A - B) >= 2){ if(A > B){ ret += 'a'; ret += 'a'; A -= 2; if(B) { ret += 'b'; B--; } }else{ ret += 'b'; ret += 'b'; B -= 2; if(A) { ret += 'a'; A--; } } } while(A || B){ if(A && (ret.size() < 2 || !(ret.size() >= 2 && ret[ret.size() - 1] == ret[ret.size() - 2] && ret[ret.size() - 1] == 'a') ) ){ ret += 'a'; A--; if(B) { ret += 'b'; B--; } }else{ ret += 'b'; B--; if(A) { ret += 'a'; A--; } } } return ret; } }; main(){ Solution ob; cout << (ob.strWithout3a3b(4, 1)); }
इनपुट
4 1
आउटपुट
"aabaa"