Print all permutations of a string python without recursion

View Discussion

Improve Article

Save Article

  • Read
  • Discuss
  • View Discussion

    Improve Article

    Save Article

    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)


    How do you find all permutations of string without recursion?

    For example, for , the swap sequence 012 leaves all items in place, while 122 starts by swapping index 0 with index 1, then swaps 1 with 2, and then swaps 2 with 2 (i.e. leaves it in place). This results in the permutation BCA.

    How do you print all permutations of a string in Python?

    Find all permutations of a string in Python.
    import itertools..
    if __name__ == '__main__':.
    s = 'ABC'.
    nums = list(s).
    permutations = list(itertools. permutations(nums)).
    # Output: ['ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA'].
    print([''. join(permutation) for permutation in permutations]).

    How do you get all the possible combinations of a string in Python?

    To find all possible permutations of a given string, you can use the itertools module which has a useful method called permutations(iterable[, r]). This method return successive r length permutations of elements in the iterable as tuples.

    How do you do permutations in Python without Itertools?

    A. To create combinations without using itertools, iterate the list one by one and fix the first element of the list and make combinations with the remaining list. Similarly, iterate with all the list elements one by one by recursion of the remaining list.