View Discussion
Improve Article
Save Article
View Discussion
Improve Article
Save Article
Given a string, write a Python program to find out all possible permutations of a string. Let’s discuss a few methods to solve the
problem.
Method #1: Using Naive Method
Python3
ini_str
=
"abc"
print
[
"Initial string"
, ini_str]
result
=
[]
def
permute[data, i, length]:
if
i
=
=
length:
result.append[''.join[data] ]
else
:
for
j
in
range
[i, length]:
data[i], data[j]
=
data[j], data[i]
permute[data, i
+
1
, length]
data[i], data[j]
=
data[j], data[i]
permute[
list
[ini_str],
0
,
len
[ini_str]]
print
[
"Resultant permutations"
,
str
[result]]
Output:
Initial string abc Resultant permutations ['abc', 'acb', 'bac', 'bca', 'cba', 'cab']
Method #2: Using itertools
Python3
from
itertools
import
permutations
ini_str
=
"abc"
print
[
"Initial string"
, ini_str]
permutation
=
[''.join[p]
for
p
in
permutations[ini_str]]
print
[
"Resultant List"
,
str
[permutation]]
Output:
Initial string abc Resultant List ['abc', 'acb', 'bac', 'bca', 'cab', 'cba']
View Discussion
Improve Article
Save Article
View Discussion
Improve Article
Save Article
A permutation also called an “arrangement number” or “order,” is a rearrangement of the elements of an ordered list S into a one-to-one correspondence with S itself. A string of length n has n! permutation.
Source: Mathword[//mathworld.wolfram.com/Permutation.html]
Below are the permutations of string ABC.
ABC ACB BAC BCA CBA CAB
Here is a solution that is used as a basis in backtracking.
Python3
def
toString[
List
]:
return
''.join[
List
]
def
permute[a, l, r]:
if
l
=
=
r:
print
[toString[a]]
else
:
for
i
in
range
[l, r
+
1
]:
a[l], a[i]
=
a[i], a[l]
permute[a, l
+
1
, r]
a[l], a[i]
=
a[i], a[l]
string
=
"ABC"
n
=
len
[string]
a
=
list
[string]
permute[a,
0
, n
-
1
]
Output:
ABC ACB BAC BCA CBA CAB
Algorithm Paradigm: Backtracking
Time Complexity: O[n*n!] Note that there are n! permutations and it requires O[n] time to print a permutation.
Auxiliary Space: O[r – l]
Note: The above solution prints duplicate permutations if there are repeating characters in the input string. Please see the below link for a solution that prints only distinct permutations even if there are duplicates in input.
Print all distinct permutations of a given string
with duplicates.
Permutations of a given string using STL
Another approach:
Python3
def
permute[s, answer]:
if
[
len
[s]
=
=
0
]:
print
[answer, end
=
" "
]
return
for
i
in
range
[
len
[s]]:
ch
=
s[i]
left_substr
=
s[
0
:i]
right_substr
=
s[i
+
1
:]
rest
=
left_substr
+
right_substr
permute[rest, answer
+
ch]
answer
=
""
s
=
input
[
"Enter the string : "
]
print
[
"All possible strings are : "
]
permute[s, answer]
Output:
Enter the string : abc All possible strings are : abc acb bac bca cab cba
Time Complexity: O[n*n!] The time complexity is the same as the above approach, i.e. there are n! permutations and it requires O[n] time to print a permutation.
Auxiliary Space: O[|s|]