मान लीजिए कि हमारे पास दो पूर्णांक 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"