Given a string of length n, print all permutation of the given string. Repetition of characters is allowed. Print these permutations in lexicographically sorted order
Examples:
Examples:
Input: AB
Ouput: All permutations of AB with repetition are:
AA
AB
BA
BB
void allLexicographicRecur (char *str, char* data, int last, int index){ int i, len = strlen(str); // One by one fix all characters at the given index and recur for the // subsequent indexes for ( i=0; i<len; i++ ) { // Fix the ith character at index and if this is not the last index // then recursively call for higher indexes data[index] = str[i] ; // If this is the last index then print the string stored in data[] if (index == last) printf("%s\n", data); else // Recur for higher indexes allLexicographicRecur (str, data, last, index+1); }}/* This function sorts input string, allocate memory for data (needed for allLexicographicRecur()) and calls allLexicographicRecur() for printing all permutations */void allLexicographic(char *str){ int len = strlen (str) ; // Create a temp array that will be used by allLexicographicRecur() char *data = (char *) malloc (sizeof(char) * (len + 1)) ; data[len] = '\0'; // Sort the input string so that we get all output strings in // lexicographically sorted order qsort(str, len, sizeof(char), compare); // Now print all permutaions allLexicographicRecur (str, data, len-1, 0); // Free data to avoid memory leak free(data);}
In the above implementation, it is assumed that all characters of the input string are different. The implementation can be easily modified to handle the repeated characters. We have to add a preprocessing step to find unique characters (before calling allLexicographicRecur()).