ধরুন আমাদের দুটি পূর্ণসংখ্যা A এবং B আছে, আমাদের যেকোনো স্ট্রিং S ফেরত দিতে হবে, যেমন −
-
S এর দৈর্ঘ্য A + B আছে এবং ঠিক কতগুলো অক্ষর 'a' এবং B সংখ্যা 'b' অক্ষর রয়েছে।
-
সাবস্ট্রিং "aaa" এবং "bbb" স্ট্রিং S
এ থাকবে না
তাই যদি প্রদত্ত পূর্ণসংখ্যা A =4, B =1 হয়, তাহলে ফলাফল হবে "aabaa"।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি স্ট্রিং রেট সংজ্ঞায়িত করুন, প্রাথমিকভাবে এটি খালি
-
যখন |A – B|>=2,
-
যদি A> B, তাহলে
-
ret :=ret concatenate 'aa'
-
A 2 দ্বারা হ্রাস করুন
-
যদি B অ-শূন্য হয় তাহলে ret সহ 'b' হয় এবং B 1 দ্বারা হ্রাস করে
-
-
অন্যথায়
-
ret :=ret concatenate ‘bb’
-
B 2 দ্বারা হ্রাস করুন
-
A যদি শূন্য না হয় তাহলে ret সহ 'a' হয় এবং A কমিয়ে 1
-
-
-
যখন হয় A অ-শূন্য, বা B অ-শূন্য
-
A যদি শূন্য না হয় এবং (ret এর সাইজ <2 বা না হয় (ret এর সাইজ>=2 এবং ret এর শেষ উপাদান =ret এর দ্বিতীয় শেষ উপাদান) এবং ret এর শেষ উপাদানটি হয় 'a'), তাহলে
-
ret :=ret + 'a', A কমিয়ে 1
-
যদি B অ-শূন্য হয়
-
ret :=ret concatenate 'b', B কে 1 দ্বারা হ্রাস করুন
-
-
অন্যথায় 'b' কে রেট করুন, B কে 1 দ্বারা কমিয়ে দিন, যদি A 0 না হয়, তাহলে ret এর সাথে a কে সংযুক্ত করুন এবং A কে 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"