Lexicographically n-th permutation of a string

07 Jul, 2022
Given a string of length m containing lowercase alphabets only. You have to find the n-th permutation of string lexicographically. Examples:
Input : str[] = "abc", n = 3
Output : Result = "bac"
Explanation : All possible permutation in
sorted order: abc, acb, bac, bca, cab, cba

Input : str[] = "aba", n = 2
Output : Result = "aba"
Explanation : All possible permutation
in sorted order: aab, aba, baa
Prerequisite : Permutations of a given string using STL Idea behind printing n-th permutation is quite simple we should use STL (explained in above link) for finding next permutation and do it till the nth permutation. After n-th iteration, we should break from the loop and then print the string which is our nth permutation.
    long int i = 1;
    do
    {
        // check for nth iteration
        if (i == n)
            break;
       i++; // keep incrementing the iteration
    } while (next_permutation(str.begin(), str.end()));

    // print string after nth iteration
   print str;
C++
Java
Python3
C#
// C++ program to print nth permutation with// using next_permute()#include <bits/stdc++.h>using namespace std; // Function to print nth permutation// using next_permute()void nPermute(string str, long int n){    // Sort the string in lexicographically    // ascending order    sort(str.begin(), str.end());     // Keep iterating until    // we reach nth position    long int i = 1;    do {        // check for nth iteration        if (i == n)            break;         i++;    } while (next_permutation(str.begin(), str.end()));     // print string after nth iteration    cout << str;} // Driver codeint main(){    string str = "GEEKSFORGEEKS";    long int n = 100;    nPermute(str, n);    return 0;}
// Java program to print nth permutation with// using next_permute()import java.util.*; class GFG{ // Function to print nth permutation// using next_permute()static void nPermute(char[] str, int n){    // Sort the string in lexicographically    // ascending order    Arrays.sort(str);     // Keep iterating until    // we reach nth position    int i = 1;    do {        // check for nth iteration        if (i == n)            break;         i++;    } while (next_permutation(str));     // print string after nth iteration    System.out.println(String.valueOf(str));} static boolean next_permutation(char[] p){    for (int a = p.length - 2; a >= 0; --a)        if (p[a] < p[a + 1])        for (int b = p.length - 1;; --b)            if (p[b] > p[a])            {                char t = p[a];                p[a] = p[b];                p[b] = t;                for (++a, b = p.length - 1; a < b; ++a, --b)                {                    t = p[a];                    p[a] = p[b];                    p[b] = t;                }                return true;            }    return false;} // Driver codepublic static void main(String[] args){    String str = "GEEKSFORGEEKS";    int n = 100;    nPermute(str.toCharArray(), n);}} // This code contributed by Rajput-Ji
# Python3 program to print nth permutation# with using next_permute() # next_permutation method implementationdef next_permutation(L):    n = len(L)    i = n - 2    while i >= 0 and L[i] >= L[i + 1]:        i -= 1     if i == -1:        return False     j = i + 1    while j < n and L[j] > L[i]:        j += 1    j -= 1     L[i], L[j] = L[j], L[i]     left = i + 1    right = n - 1     while left < right:        L[left], L[right] = L[right], L[left]        left += 1        right -= 1     return True # Function to print nth permutation# using next_permute()def nPermute(string, n):    string = list(string)    new_string = []     # Sort the string in lexicographically    # ascending order    string.sort()    j = 2     # Keep iterating until    # we reach nth position    while next_permutation(string):        new_string = string         # check for nth iteration        if j == n:            break        j += 1     # print string after nth iteration    print(''.join(new_string)) # Driver Codeif __name__ == "__main__":    string = "GEEKSFORGEEKS"    n = 100    nPermute(string, n) # This code is contributed by# sanjeev2552
// C# program to print nth permutation with// using next_permute()using System; class GFG{ // Function to print nth permutation// using next_permute()static void nPermute(char[] str, int n){    // Sort the string in lexicographically    // ascending order    Array.Sort(str);     // Keep iterating until    // we reach nth position    int i = 1;    do    {        // check for nth iteration        if (i == n)            break;         i++;    } while (next_permutation(str));     // print string after nth iteration    Console.WriteLine(String.Join("",str));} static bool next_permutation(char[] p){    for (int a = p.Length - 2; a >= 0; --a)        if (p[a] < p[a + 1])        for (int b = p.Length - 1;; --b)            if (p[b] > p[a])            {                char t = p[a];                p[a] = p[b];                p[b] = t;                for (++a, b = p.Length - 1; a < b; ++a, --b)                {                    t = p[a];                    p[a] = p[b];                    p[b] = t;                }                return true;            }    return false;} // Driver codepublic static void Main(){    String str = "GEEKSFORGEEKS";    int n = 100;    nPermute(str.ToCharArray(), n);}} /* This code contributed by PrinciRaj1992 */
Output:
EEEEFGGRKSOSK
Time Complexity: O(n log n)
Auxiliary Space: O(1)
Find n-th lexicographically permutation of a string | Set 2 This article is contributed by Aarti_Rathi and Shivam Pradhan (anuj_charm). If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@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.
Rajput-Ji
princiraj1992
sanjeev2552
lexicographic-ordering
Strings
Strings
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Write a program to reverse an array or string
Reverse a string in Java
Write a program to print all permutations of a given string
C++ Data Types
Different Methods to Reverse a String in C++
Python program to check if a string is palindrome or not
Longest Common Subsequence | DP-4
Check for Balanced Brackets in an expression (well-formedness) using Stack
Length of the longest substring without repeating characters
Top 50 String Coding Problems for Interviews