একটি স্ট্রিং দেওয়া আছে (যে সর্টেড অবস্থায় থাকতে পারে এবং ডুপ্লিকেট ক্যারেক্টর থাকতে পারে)। এর সব ডিস্টিংক্ট পারমুটেশন লেক্সিকোগ্রাফিক্যালি সর্টেড অর্ডারে প্রিন্ট করতে হবে।
উদাহরণ: "ABD" → ABD, ADB, BAD, BDA, DAB, DBA
- স্ট্রিং সর্টেড থাকলে পারমুটেশন জেনারেট করলেই সর্টেড অর্ডারে আসে।
- সুয়াপ করার আগে চেক করুন যে ক্যারেক্টরটি ইতিমধ্যে সুয়াপ হয়েছে কিনা (ডুপ্লিকেট এড়াতে)।
#include <bits/stdc++.h>
using namespace std;
bool swaper(char str[], int start, int curr) {
for (int i = start; i < curr; i++)
if (str[i] == str[curr]) return 0;
return 1;
}
void printPermutations(char str[], int index, int n) {
if (index >= n) {
cout << str << "\t";
return;
}
for (int i = index; i < n; i++) {
bool check = swaper(str, index, i);
if (check) {
swap(str[index], str[i]);
printPermutations(str, index + 1, n);
swap(str[index], str[i]);
}
}
}
int main() {
char str[] = "AABC";
int n = strlen(str);
cout << "The string is : " << str << endl;
cout << "The distinct sorted permutations are : \t";
printPermutations(str, 0, n);
return 0;
}
The string is : AABC The distinct sorted permutations are : AABC AACB ABAC ABCA ACBA ACAB BAAC BACA BCAA CABA CAAB CBAA