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()).