Skip to content
Related Articles

Related Articles

Print all lexicographical greater permutations of a given string

View Discussion
Improve Article
Save Article
  • Difficulty Level : Expert
  • Last Updated : 21 Jul, 2022

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: 

CPP




// 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<<endl;
 
    // 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<<endl;
    }
}
 
// Driver Code
int main()
{
 
    string S = "ABC";
 
    print_lexiStrings(S);
}

Output

ACB
BAC
BCA
CAB
CBA

Time Complexity : O(N*N!), As next_permutation takes O(N!) for finding all the permutations and in order to print the string it will take O(N) time complexity, where N is the length of the string.
Auxiliary Space : O(1)

My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!