Permutations of a given string using STL - GeeksforGeeks

03 Feb, 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
Below are the permutations of string ABC. 
“ABC”, “ACB”, “BAC”, “BCA”, “CBA”, “CAB” 
We have discussed C implementation to print all permutations of a given string using backtracking here. In this post, C++ implementation using STL is discussed.
Method 1 (Using rotate()) std::rotate function rotates elements of a vector/string such that the passed middle element becomes first. For example, if we call rotate for “ABCD” with middle as second element, the string becomes “BCDA” and if we again call rotate with middle as second element, the string becomes “CDAB”. Refer this for a sample program. 
Below is C++ implementation. 
C++
// C++ program to print all permutations with// duplicates allowed using rotate() in STL#include <bits/stdc++.h>using namespace std; // Function to print permutations of string str,// out is used to store permutations one by onevoid permute(string str, string out){    // When size of str becomes 0, out has a    // permutation (length of out is n)    if (str.size() == 0)    {        cout << out << endl;        return;    }     // One be one move all characters at    // the beginning of out (or result)    for (int i = 0; i < str.size(); i++)    {        // Remove first character from str and        // add it to out        permute(str.substr(1), out + str[0]);         // Rotate string in a way second character        // moves to the beginning.        rotate(str.begin(), str.begin() + 1, str.end());    }} // Driver codeint main(){    string str = "ABC";    permute(str, "");    return 0;}
ABC
ACB
BCA
BAC
CAB
CBA
Method 2 (using next_permutation) We can use next_permutation that modifies a string so that it stores lexicographically next permutation. If current string is lexicographically largest, i.e., “CBA”, then next_permutation returns false.
We first sort the string, so that it is converted to lexicographically smallest permutation. Then we one by one call next_permutation until it returns false.
C++
// C++ program to print all permutations with// duplicates allowed using next_permutation#include <bits/stdc++.h>using namespace std; // Function to print permutations of string str// using next_permutationvoid permute(string str){    // Sort the string in lexicographically    // ascending order    sort(str.begin(), str.end());     // Keep printing next permutation while there    // is next permutation    do {       cout << str << endl;    } while (next_permutation(str.begin(), str.end()));} // Driver codeint main(){    string str = "CBA";    permute(str);    return 0;}
ABC
ACB
BAC
BCA
CAB
CBA
Note that the second method always prints permutations in lexicographically sorted order irrespective of input string.This article is contributed by Aditya Goel. If you like GeeksforGeeks and would like to contribute, you can also write an article and mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above 
_dayanand
kryptonian
surajv
permutation
STL
Combinatorial
Strings
Strings
permutation
Combinatorial
STL
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Find the Number of Permutations that satisfy the given condition in an array
Python program to get all subsets of given size of a set
Print all subsets of given size of a set
Find all distinct subsets of a given set using BitMasking Approach
Make all combinations of size k
Reverse a string in Java
Write a program to reverse an array or string
Longest Common Subsequence | DP-4
C++ Data Types
Python program to check if a string is palindrome or not