মান লেযিয়ে দুটি পূর্ণসংখ্যা A এবং B দেওয়া আছে, আমাদের যেকোনো একটি স্ট্রিং S রিটার্ন করতে হবে যাতে -
S-এর দৈর্ঘ্য A + B এবং এতে ঠিক A সংখ্যা 'a' এবং B সংখ্যা 'b' অক্ষর থাকে।
সাবস্ট্রিং "aaa" এবং "bbb" S-এ থাকবে না।
A = 4, B = 1 হলে ফলাফল হবে "aabaa"।
এটি সমাধান করার জন্য আমরা নিচের ধাপগুলো অনুসরণ করব -
ret := খালি স্ট্রিং
যখন |A - B| >= 2
যদি A > B হয়, তবে
ret := ret + "aa"
A := A - 2
যদি B ≠ 0 হয়, ret := ret + "b" এবং B--
অন্যথায়
ret := ret + "bb"
B := B - 2
যদি A ≠ 0 হয়, ret := ret + "a" এবং A--
যখন A ≠ 0 বা B ≠ 0
যদি A ≠ 0 এবং (ret.size() < 2 বা !(ret.size() >= 2 এবং ret[ret.size()-1] == ret[ret.size()-2] এবং ret[ret.size()-1] == 'a')), তবে
ret := ret + 'a', A--
যদি B ≠ 0, ret := ret + 'b', B--
অন্যথায় ret := ret + 'b', B--, যদি A ≠ 0 হয় ret := ret + 'a', A--
ret রিটার্ন করুন
নিচের বাস্তবায়নটি দেখে আরও ভালো বুঝতে পারবেন -
উদাহরণ
#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"