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[//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|]


    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.

    Chủ Đề