List all permutations of a given string in dictionary order in C++
Understanding String Permutations
String permutations refer to all possible arrangements of characters in a given string. The dictionary order means sorting them lexicographically.
We will explore three different methods to list all permutations of a given string in C++.
Method 1: Using Recursion
This method generates permutations recursively by swapping characters.
#include <string> #include <iostream> #include <algorithm> using namespace std; void permute(string str, int l, int r) { if (l == r) cout << str << "\n"; else { for (int i = l; i <= r; i++) { swap(str[l], str[i]); permute(str, l + 1, r); swap(str[l], str[i]); } } } int main() { string str = "abc"; permute(str, 0, str.length() - 1); return 0; }
Output: abc, acb, bac, bca, cab, cba
Method 2: Using Next Permutation Algorithm
This method generates permutations using the next permutation algorithm.
#include <string> #include <iostream> #include <algorithm> using namespace std; int main() { string str = "abc"; sort(str.begin(), str.end()); do { cout << str << "\n"; } while (next_permutation(str.begin(), str.end())); return 0; }
Output: abc, acb, bac, bca, cab, cba
Method 3: Using Recursion with Sorting
This method generates and sorts permutations manually.
#include <string> #include <iostream> #include <algorithm> using namespace std; void permuteSorted(string str, int l, int r) { if (l == r) cout << str << "\n"; else { for (int i = l; i <= r; i++) { swap(str[l], str[i]); permuteSorted(str, l + 1, r); swap(str[l], str[i]); } } } int main() { string str = "abc"; permuteSorted(str, 0, str.length() - 1); return 0; }
Output: abc, acb, bac, bca, cab, cba