একটি স্ট্রিং দেওয়া থাকলে, সেটিতে থাকা প্রতিটি অভিন্ন অক্ষরের জোড়ার মধ্যে একটি স্টার (*) যোগ করতে হবে। এটি রিকারসিভ পদ্ধতিতে করা হবে।
যদি ইনপুট স্ট্রিং "wellness" হয়, তবে আউটপুট হবে "wel*lnes*s"।
উদাহরণ
ইনপুট − str1 = "happiness"
আউটপুট − * যোগ করার পর স্ট্রিং: hap*pines*s
ব্যাখ্যা − 'pp' এবং 'ss' জোড়ার মাঝপথে * যোগ করলে ফলাফল hap*pines*s হয়।
ইনপুট − str1 = "swimmmmingggg pooool"
আউটপুট − * যোগ করার পর স্ট্রিং: swim*m*m*ming*g*g*g po*o*o*ol
ব্যাখ্যা − 'mm', 'gg' ও 'oo' জোড়ার মাঝপথে * যোগ করলে ফলাফল swim*m*m*ming*g*g*g po*o*o*ol হয়।
প্রোগ্রামে ব্যবহৃত পদ্ধতি
প্রতি ইটারেশনে স্ট্রিং দুটি অংশে ভাগ করা হয়। যদি প্রথম অংশের শেষ অক্ষর ও দ্বিতীয় অংশের প্রথম অক্ষর একই হয়, তবে মাঝপথে '*' যোগ করা হয়। রিকারসন থামায় যখন দ্বিতীয় অংশের দৈর্ঘ্য ০ হয়।
ইনপুট স্ট্রিং
str1ও এর দৈর্ঘ্যlenনিন।addStar(string& s1, int i, int len1)ফাংশন স্ট্রিং, দৈর্ঘ্য ও বর্তমান ইনডেক্স নিয়ে কাজ করে।tmp1=s1-এর ০ থেকেiপর্যন্ত সাবস্ট্রিং।tmp2=s1-এরiথেকেlen1+1পর্যন্ত সাবস্ট্রিং।যদি
tmp1-এর শেষ অক্ষর ওtmp2-এর প্রথম অক্ষর সমান হয়, তবেs1 = tmp1 + '*' + tmp2সেট করুন।addStar(s1, i+1, len1)কল করে পরবর্তী ইটারেশনে যান।শেষে
main-এ ফলাফল প্রিন্ট করুন।
উদাহরণ কোড
#include <iostream>
using namespace std;
void addStar(string& s1, int i, int len1){
string tmp1 = s1.substr(0, i);
string tmp2 = s1.substr(i, len1 + 1);
if (tmp2.length() == 0){
return;
}
if (tmp1[i-1] == tmp2[0]){
s1 = tmp1 + '*' + tmp2;
}
addStar(s1, i+1, len1);
}
int main(){
string str1 = "aabbcccdddd";
int len = str1.length();
addStar(str1, 0, len-1);
cout << "String after adding * : " << str1 << endl;
return 0;
}
আউটপুট
উপরের কোড রান করলে নিচের আউটপুট পাওয়া যাবে:
String after adding * : a*ab*bc*c*cd*d*d*d