এই সমস্যায় দুটি স্ট্রিং str1 এবং str2 দেওয়া আছে। আমাদের দুটি স্ট্রিং থেকে সব ইন্টারলিভিং স্ট্রিং প্রিন্ট করতে হবে।
ইন্টারলিভিং স্ট্রিং হলো দুটি দেওয়া স্ট্রিং থেকে তৈরি স্ট্রিং যাতে প্রতিটি স্ট্রিংর ক্যারেক্টারগুলোর ক্রম বজায় থাকে।
উদাহরণ
ইনপুট: str1 = "XY", str2 = "NS" আউটপুট: XYNS, XNYS, XNSY, NXYS, NXSY, NSXY
এই সমস্যাটি সমাধানের জন্য দুটি স্ট্রিংর সব ক্যারেক্টারের কম্বিনেশন তৈরি করতে হবে। str1-এর দৈর্ঘ্য = m এবং str2-এর দৈর্ঘ্য = n হলে এই স্ট্রিংগুলো থেকে সব ইন্টারলিভড স্ট্রিং তৈরি করা হবে।
সব ইন্টারলিভিং স্ট্রিং প্রিন্ট করার জন্য স্ট্রিংর ক্যারেক্টারগুলো ফিক্স করে রিকার্সিভলি সব কম্বিনেশনের জন্য কল করা হবে।
বাস্তবায়ন
#include <iostream>
#include <string.h>
using namespace std;
void printStrings(char *str1, char *str2, char *iStr, int m, int n, int i) {
if (m == 0 && n == 0)
cout << iStr << endl;
if (m != 0) {
iStr[i] = str1[0];
printStrings(str1 + 1, str2, iStr, m - 1, n, i + 1);
}
if (n != 0) {
iStr[i] = str2[0];
printStrings(str1, str2 + 1, iStr, m, n - 1, i + 1);
}
}
void generateInterleavingString(char *str1, char *str2, int m, int n) {
char *iStr = new char[((m + n + 1) * sizeof(char))];
iStr[m + n] = '\0';
printStrings(str1, str2, iStr, m, n, 0);
}
int main() {
char str1[] = "XY";
char str2[] = "NS";
cout << "All interleaving string are :\n";
generateInterleavingString(str1, str2, strlen(str1), strlen(str2));
return 0;
}
আউটপুট
All interleaving string is : XYNS XNYS XNSY NXYS NXSY NSXY