इस समस्या में, हमें एक स्ट्रिंग दी जाती है जिसमें डुप्लिकेट वर्ण हो सकते हैं। हमारा काम स्ट्रिंग्स के सभी अलग-अलग क्रमपरिवर्तनों को प्रिंट करना है।
आइए समस्या को समझने के लिए एक उदाहरण लेते हैं -
Input: string = “XYZ” Output: XYZ XZY YXZ YZX ZYX ZXY
इस समस्या को हल करने के लिए, हमें स्ट्रिंग के एक तत्व को ठीक करना होगा। और फिर स्ट्रिंग के सभी तत्वों को पुनरावृत्त करें।
उदाहरण
हमारे समाधान को लागू करने के लिए कार्यक्रम,
#include <string.h> #include <iostream> using namespace std; int compare(const void* a, const void* b) { return (*(char*)a - *(char*)b); } void swapChar(char* a, char* b) { char t = *a; *a = *b; *b = t; } int findCeil(char str[], char first, int l, int h) { int ceilIndex = l; for (int i = l + 1; i <= h; i++) if (str[i] > first && str[i] < str[ceilIndex]) ceilIndex = i; return ceilIndex; } void printPermutations(char str[]) { int size = strlen(str); qsort(str, size, sizeof(str[0]), compare); bool isFinished = false; while (!isFinished) { static int x = 1; cout<<str<<"\t"; int i; for (i = size - 2; i >= 0; --i) if (str[i] < str[i + 1]) break; if (i == -1) isFinished = true; else { int ceilIndex = findCeil(str, str[i], i + 1, size - 1); swapChar(&str[i], &str[ceilIndex]); qsort(str + i + 1, size - i - 1, sizeof(str[0]), compare); } } } int main() { char str[] = "SNGY"; cout<<"All permutations of the string"<<str<<" are :\n"; printPermutations(str); return 0; }
आउटपुट
All permutations of the stringSNGY are − GNSY GNYS GSNY GSYN GYNS GYSN NGSY NGYS NSGY NSYG NYGS NYSG SGNY SGYN SNGY SNYG SYGN SYNG YGNS YGSN YNGS YNSG YSGN YSNG