Python | All Permutations of a string in lexicographical order without using recursion
Last Updated :
11 Jul, 2022
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.
Python
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:
- First we create a loop that will run n! ties where n is the length of the string as there will be n! permutations.
- Every iteration prints the string and finds its next larger lexicographical permutation to be printed in the next iteration.
- The next higher permutation is found as :-
- Let the string is called str, find the smallest index i such that all elements in str[i…end] are in descending order.
- If str[i…end] is the entire sequence, i.e. i == 0, then str is the highest permutation. So we simply reverse the entire string to get the smallest permutation which we consider as the next permutation.
- If i > 0, then we reverse str[i…end].
- Then we look for the smallest element in str[i…end] that is greater than str[i – 1] and swap its position with str[i – 1].
- This is then the next permutation.
Python3
from math import factorial
def lexicographical_permutations( str ):
for p in range (factorial( len ( str ))):
print (''.join( str ))
i = len ( str ) - 1
while i > 0 and str [i - 1 ] > str [i]:
i - = 1
str [i:] = reversed ( str [i:])
if i > 0 :
q = i
while str [i - 1 ] > str [q]:
q + = 1
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
Time Complexity: O(n*n!)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...