How do you return all permutations of a string in python?

View Discussion

Improve Article

Save Article

  • Read
  • Discuss
  • 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

  • Read
  • Discuss
  • 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(http://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.

    How do you return all permutations of a string in python?

    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|)


    How do I return a permutation of a string?

    Using a backtracking approach, all the permutations of the given string can be printed..
    Swap S[i] and S[idx]..
    Construct all other possible permutations, from backtrack(idx + 1)..
    Backtrack again, i.e. swap(S[i], S[idx])..

    How do you generate every permutation of a string?

    Step 1: Merge [a] and b: [ba, ab] Step 2: Merge [ba, ab] and c: [cba, bca, bac, cab, acb, abc] Step 3: Merge [cba, bca, bac, cab, acb, abc] and d: [dcba, cdba, cbda, cbad, dbca, bdca, bcda, bcad, dbac, bdac, badc, bacd, dcab, cdab, cadb, cabd, dacb, adcb, acdb, acbd, dabc, adbc, abdc, abcd]

    How do you find all permutations?

    To calculate the number of permutations, take the number of possibilities for each event and then multiply that number by itself X times, where X equals the number of events in the sequence. For example, with four-digit PINs, each digit can range from 0 to 9, giving us 10 possibilities for each digit.

    How do you find the number of permutations in Python?

    To calculate permutations in Python, use the itertools. permutation() method. The itertools. permutations() method takes a list, dictionary, tuple, or other iterators as a parameter and returns the permutations of that list.