Python | All Permutations of a string in lexicographical order without using recursion
Write a python program to print all the permutations of a string in lexicographical order.
Examples:
Input : python Output : hnopty hnopyt hnotpy hnotyp hnoypt ...... ytpnho ytpnoh ytpohn ytponh Input : xyz Output : xyz xzy yxz yzx zxy zyx
Method 1:
Using the default library itertools function permutations.
permutations function will create all the permutations of a given string and then we sort the result to get our desired output.
from itertools import permutations def lexicographical_permutation( str ): perm = sorted (''.join(chars) for chars in permutations( str )) for x in perm: print (x) str = 'abc' lexicographical_permutation( str ) |
Output :
abc acb bac bca cab cba
Method 2:
# import library from math import factorial def lexicographical_permutations( str ): # there are going to be n ! permutations where n = len(seq) for p in range (factorial( len ( str ))): print (''.join( str )) i = len ( str ) - 1 # find i such that str[i:] is the largest sequence with # elements in descending lexicographic order while i > 0 and str [i - 1 ] > str [i]: i - = 1 # reverse str[i:] str [i:] = reversed ( str [i:]) if i > 0 : q = i # find q such that str[q] is the smallest element # in str[p:] such that str[q] > str[i - 1] while str [i - 1 ] > str [q]: q + = 1 # swap str[i - 1] and str[q] temp = str [i - 1 ] str [i - 1 ] = str [q] str [q] = temp s = 'abcd' s = list (s) s.sort() lexicographical_permutations(s) |
Output :
abcd abdc acbd acdb adbc adcb bacd badc bcad bcda bdac bdca cabd cadb cbad cbda cdab cdba dabc dacb dbac dbca dcab dcba