C++ Program To Print All Permutations Of A Given String - GeeksforGeeks

11 Dec, 2021

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.


C++
 

 
 










// C++ program to print all permutations  
// with duplicates allowed  
#include <bits/stdc++.h>  
using namespace std;  
  
// Function to print permutations  
// of string  
// This function takes three parameters:  
// 1. String  
// 2. Starting index of the string  
// 3. Ending index of the string.  
void permute(string a, int l, int r)  
{  
    // Base case  
    if (l == r)  
        cout<<a<<endl;  
    else
    {  
        // Permutations made  
        for (int i = l; i <= r; i++)  
        {  
            // Swapping done  
            swap(a[l], a[i]);  
  
            // Recursion called  
            permute(a, l+1, r);  
  
            //backtrack  
            swap(a[l], a[i]);  
        }  
    }  
}  
  
// Driver Code  
int main()  
{  
    string str = "ABC";  
    int n = str.size();  
    permute(str, 0, n-1);  
    return 0;  
}  
// This is code is contributed by rathbhupendra  






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:
C++
 

 
 










// C++ program to implement 
// the above approach 
#include <bits/stdc++.h> 
#include <string> 
using namespace std; 
  
void permute(string s,  
             string answer) 
{ 
    if(s.length() == 0) 
    { 
        cout << answer << "  "; 
        return; 
    } 
    for(int i = 0;  
            i < s.length(); i++) 
    { 
        char ch = s[i]; 
        string left_substr = s.substr(0, i); 
        string right_substr = s.substr(i + 1); 
        string rest = left_substr + right_substr; 
        permute(rest , answer+ch); 
    } 
} 
  
// Driver code 
int main() 
{ 
    string s; 
    string answer = ""; 
  
    cout << "Enter the string : "; 
    cin >> s; 
  
    cout <<  
    "All possible strings are : "; 
    permute(s, answer); 
    return 0; 
} 






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|)
Please refer complete article on Write a  program to print all permutations of a given string for more details!

Accolite


Amazon


Apple


Cisco


Citrix


MAQ Software


OYO Rooms


permutation


Samsung


Snapdeal


Walmart


Backtracking


C++ Programs


Combinatorial


Greedy


Mathematical


Recursion


Strings

Writing code in comment? 
                                    Please use ide.geeksforgeeks.org, 
                                    generate link and share the link here.
                                
Tug of War
Difference between Backtracking and Branch-N-Bound technique
N-Queen Problem | Local Search using Hill climbing with random neighbour
Find if there is a path of more than k length from a source
Find shortest safe route in a path with landmines
Header files in C/C++ and its uses
C++ Program for QuickSort
Program to print ASCII Value of a character
How to return multiple values from a function in C or C++?
CSV file management using C++