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

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 codeint 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
Accolite
Amazon
OYO Rooms
Samsung
Snapdeal
Citrix
Walmart
MAQ Software
Cisco
Apple
Strings
Greedy
Mathematical
Recursion
permutation
Combinatorial
Backtracking
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Find shortest safe route in a path with landmines
Find if there is a path of more than k length from a source
Top 20 Backtracking Algorithm Interview Questions
Longest Possible Route in a Matrix with Hurdles
Sum of subsets of all the subsets of an array | O(N)
Header files in C/C++ and its uses
How to return multiple values from a function in C or C++?
Sorting a Map by value in C++ STL
C++ program for hashing with chaining
Passing a function as a parameter in C++