Print all lexicographical greater permutations of a given string

Given a string S, print those permutations of string S which are lexicographically greater than S. If there is no such permutation of string, print -1.

Examples:

Input : BCA
Output : CAB, CBA
Explanation:
Here, S = “BCA”, and there are 2 strings “CAB, CBA” which are lexicographically greater than S.

Input : CBA
Output : -1
There is no string which is lexicographically greater than S, so the output is -1.

Approach: To solve the problem mentioned above we will use STL. Use next_permuation() and prev_permutation() functions to check and the lexicographically greater strings. If the string is greater then print it otherwise print -1.



Below is the implementation of above approach:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to print the lexicographically
// greater strings then the given string
#include <bits/stdc++.h>
using namespace std;
  
// Function to print the lexicographically
// greater strings then the given string
void print_lexiStrings(string S)
{
  
    // Condition to check if there is no
    // string which is lexicographically
    // greater than string S
    if (!next_permutation(S.begin(), S.end()))
        cout << "-1";
  
    // Move to the previous permutation
    prev_permutation(S.begin(), S.end());
  
    // Iterate over all the
    // lexicographically greater strings
    while (next_permutation(S.begin(), S.end())) {
        cout << S << "\n";
    }
}
  
// Driver Code
int main()
{
  
    string S = "ABC";
  
    print_lexiStrings(S);
}

chevron_right


Output:

ACB
BAC
BCA
CAB
CBA

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.