দেওয়া কাজ হচ্ছে একটি স্ট্রিং থেকে দেয়া সাবসিকোয়েন্সের ম্যাক্সিমাম রিমUভাল সংখ্যা বের করা। একটি স্ট্রিং s দেওয়া আছে এবং আমাদেরকে 'abc' সাবসিকোয়েন্স সর্বোচ্চ কতবার রিমUভ করা যায় তা বের করতে হবে।
উদাহরণ দিয়ে বুঝি:
ইনপুট
s = 'dnabcxy'
আউটপুট
1
ব্যাখ্যা − দেয়া স্ট্রিং-এ ('dnabcxy') শুধু একটি 'abc' সাবসিকোয়েন্স পাওয়া যায়, তাই আউটপুট ১।
ইনপুট
s = 'zcabcxabc'
আউটপুট
2 ('zcabcxabc')নিচের প্রোগ্রামে ব্যবহৃত পদ্ধতি নিম্নরূপ
Max() ফাংশনে i, a, ab, abc ভেরিয়েবল ০ দিয়ে ইনিশিয়ালাইজ করা হয় int টাইপে।
i=0 থেকে i < s.length() পর্যন্ত লুপ।
লুপের ভিতরে চেক করা হয় if (s[i] == 'a')، যদি সত্য হয় তবে a-এর মান ইনক্রিমেন্ট।
অন্যথায়, চেক করা হয় if (s[i] == 'b')، যদি সত্য হয় তবে আবার চেক করা হয় if (a > 0)। যদি দুটি শর্ত সত্য হয় তবে a-এর মান ১ কমানো এবং ab-এর মান ইনক্রিমেন্ট।
শেষে, চেক করা হয় if (s[i] == 'c')، যদি সত্য হয় তবে আবার চেক করা হয় if (ab > 0)। যদি দুটি শর্ত সত্য হয় তবে ab-এর মান ১ কমানো এবং abc-এর মান ইনক্রিমেন্ট।
abc রিটার্ন
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
int Max(string s){
int i=0, a=0, ab=0, abc=0;
for (i = 0; i < s.length(); i++){
if (s[i] == 'a'){
a++;
}
else if (s[i] == 'b'){
if (a > 0){
a--;
ab++;
}
}
else if (s[i] == 'c'){
if (ab > 0){
ab--;
abc++;
}
}
}
return abc;
}
//main function
int main(){
string s = "zcabcxabc";
cout << Max(s);
return 0;
}আউটপুট
2