When it is required to print all the permutations of a string in the lexicographic order without using recursion, a method is defined, that takes the string as the parameter. It uses a simple ‘for’ loop to iterate over the string elements and uses ‘while’ condition to check for certain constraints.
Below is the demonstration of the same −
from math import factorial def lex_permutation(my_string): for i in range(factorial(len(my_string))): print(''.join(my_string)) i = len(my_string) - 1 while i > 0 and my_string[i-1] > my_string[i]: i -= 1 my_string[i:] = reversed(my_string[i:]) if i > 0: q = i while my_string[i-1] > my_string[q]: q += 1 temp_variable = my_string[i-1] my_string[i-1]= my_string[q] my_string[q]= temp_variable my_string = 'bhd' print("The string is ") print(my_string) my_string = list(my_string) print("The string is being sorted") my_string.sort() lex_permutation(my_string)
The string is bhd The string is being sorted bdh bhd dbh dhb hbd hdb
The required packages are imported.
A method named ‘lex_permutation’ is defined that takes the string as a parameter.
It uses the factorial method and iterates through the factorial of the string.
The reversed string and the original string are compared.
A simple swapping is done.
Outside the method, the string is defined, and is displayed on the console.
It is then sorted.
The method is called by passing this string.
The output is displayed on the console.