এই সমস্যায়, n ক্যারেক্টারের একটি স্ট্রিং দেওয়া থাকে এবং আমাদের স্ট্রিংয়ের ক্যারেক্টারগুলোর সব পারমুটেশন প্রিন্ট করতে হবে। স্ট্রিংয়ের ক্যারেক্টার রিপিট করার অনুমতি আছে। পারমুটেশন প্রিন্টিং アルফাবেটিক্যাল অর্ডারে (লেক্সিকোগ্রাফিক্যালি সর্টেড অর্ডারে) করা উচিত।
উদাহরণ দিয়ে বুঝি:
ইনপুট: XY
আউটপুট: XX, XY, YX, YY
এই সমস্যাটি সমাধান করতে, আমাদের ফিক্স এবং রিকার্শন লজিক ব্যবহার করতে হবে। এখানে, আমরা অ্যারের প্রথম ইনডেক্সে একটি এলিমেন্ট ফিক্স করব এবং তারপর সিকোয়েন্সের পরবর্তী এলিমেন্টের জন্য রিকার্শিভলি কল করব।
একটি ইমপ্লিমেন্টেশন উদাহরণ দেখা যাক যা সমাধানটি আপনাকে স্পষ্ট করবে।
ইনপুট স্ট্রিং XY।
১ নম্বর ইনডেক্সে প্রথম এলিমেন্ট ফিক্স করুন: X_
রিকার্শিভলি অন্য এলিমেন্ট কল করে ফিল করুন: XX -> XY
এখন ১ নম্বর ইনডেক্সে পরবর্তী এলিমেন্ট ফিক্স করুন: Y_
রিকার্শিভলি অন্য এলিমেন্ট কল করে ফিল করুন: YX -> YY
একই লজিক ৩, ৪, n দৈর্ঘ্যের স্ট্রিংয়ের জন্যও ব্যবহার করা যায়।
C++ উদাহরণ
#include <iostream> #include<string.h> using namespace std; void printPermutations(char *str, char* permutations, int last, int index){ int i, len = strlen(str); for ( i = 0; i < len; i++ ) { permutations[index] = str[i] ; if (index == last) cout<<permutations <<"\t"; else printPermutations (str, permutations, last, index+1); } } int main() { char str[] = "ABC"; cout<<"All permutations of the string with repetition of "<<str<<" are: "<<endl ; int len = strlen(str) ; char permutations[len]; printPermutations (str, permutations, len-1, 0); return 0; }আউটপুট
All permutations of the string with repetition of ABC are: AAA AAB AAC ABA ABB ABC ACA ACB ACC BAA BAB BAC BBA BBB BBC BCA BCB BCC CAA CAB CAC CBA CBB CBC CCA CCB CCC