Lexicographically largest string formed from the characters in range L and R - GeeksforGeeks

18 Feb, 2022
Given a string S and a range L and R, the task is to print the lexicographically largest string that can be formed from the characters in range L and R. Examples: 
Input: str = "thgyfh", L = 2, R = 6  
Output: yhhgf

Input: str = "striver", L = 3, R = 5
Output: vri
Approach: 
Iterate from min(L, R) to max(L, R) and increase the frequencies of characters in a freq[] array.
Iterate from 25 to 0 and print the number of times every character occurs to get the lexicographically largest string.
The common point of mistake which everyone does is they iterate from L to R instead of min(L, R) to max(L, R). Below is the implementation of the above approach:  
C++
Java
Python 3
C#
Javascript
// C++ program to print the// lexicographically largest string that// can be formed from the characters// in range L and R #include <bits/stdc++.h>using namespace std; // Function to return the lexicographically largest stringstring printLargestString(string s, int l, int r){    // hash array    int freq[26] = { 0 };     // make 0-based indexing    l--;    r--;     // iterate and count frequencies of character    for (int i = min(l, r); i <= max(l, r); i++) {        freq[s[i] - 'a']++;    }     // ans string    string ans = "";     // iterate in frequency array    for (int i = 25; i >= 0; i--) {         // add till all characters        // are added        while (freq[i]) {            ans += char('a' + i);            freq[i]--;        }    }     return ans;} // Driver Codeint main(){    string s = "striver";    int l = 3, r = 5;    cout << printLargestString(s, l, r);    return 0;}
// Java program to print the// lexicographically largest String that// can be formed from the characters// in range L and R  class GFG { // Function to return the lexicographically largest String    static String printLargestString(String s, int l, int r) {        // hash array        int freq[] = new int[26];         // make 0-based indexing        l--;        r--;         // iterate and count frequencies of character        for (int i = Math.min(l, r); i <= Math.max(l, r); i++) {            freq[s.charAt(i) - 'a']++;        }         // ans String        String ans = "";         // iterate in frequency array        for (int i = 25; i >= 0; i--) {             // add till all characters            // are added            while (freq[i] > 0) {                ans += (char) ('a' + i);                freq[i]--;            }        }         return ans;    } // Driver Code    public static void main(String[] args) {         String s = "striver";        int l = 3, r = 5;        System.out.println(printLargestString(s, l, r));     }}/* This JAVA code is contributed by 29AjayKumar*/
# Python 3 program to print the# lexicographically largest string that# can be formed from the characters# in range L and R # Function to return the lexicographically# largest stringdef printLargestString(s, l, r):     # hash array    freq = [0] * 26     # make 0-based indexing    l -= 1    r -= 1     # iterate and count frequencies of character    for i in range(min(l, r), max(l, r) + 1) :        freq[ord(s[i]) - ord('a')] += 1     # ans string    ans = ""     # iterate in frequency array    for i in range(25, -1, -1):         # add till all characters are added        while (freq[i]):            ans += chr(ord('a') + i)            freq[i] -= 1     return ans # Driver Codeif __name__ == "__main__":         s = "striver"    l = 3    r = 5    print(printLargestString(s, l, r)) # This code is contributed by ita_c
// C# program to print the lexicographically// largest String that can be formed from the// characters in range L and Rusing System; class GFG{ // Function to return the lexicographically// largest Stringstatic String printLargestString(String s,                                 int l, int r){    // hash array    int []freq = new int[26];     // make 0-based indexing    l--;    r--;     // iterate and count frequencies    // of character    for (int i = Math.Min(l, r);             i <= Math.Max(l, r); i++)    {        freq[s[i] - 'a']++;    }     // ans String    String ans = "";     // iterate in frequency array    for (int i = 25; i >= 0; i--)    {         // add till all characters        // are added        while (freq[i] > 0)        {            ans += (char) ('a' + i);            freq[i]--;        }    }     return ans;} // Driver Codepublic static void Main(){    String s = "striver";    int l = 3, r = 5;    Console.Write(printLargestString(s, l, r));}} // This code is contributed by 29AjayKumar
<script>// javascript program to print the// lexicographically largest String that// can be formed from the characters// in range L and R     // Function to return the lexicographically largest String     function printLargestString( s , l , r) {        // hash array        var freq = Array(26).fill(0);         // make 0-based indexing        l--;        r--;         // iterate and count frequencies of character        for (i = Math.min(l, r); i <= Math.max(l, r); i++) {            freq[s.charCodeAt(i) - 'a'.charCodeAt(0)]++;        }         // ans String        var ans = "";         // iterate in frequency array        for (var i = 25; i >= 0; i--) {             // add till all characters            // are added            while (freq[i] > 0) {                ans += String.fromCharCode('a'.charCodeAt(0) + i);                freq[i]--;            }        }         return ans;    }     // Driver Code              var s = "striver";        var l = 3, r = 5;        document.write(printLargestString(s, l, r));  // This code is contributed by todaysgaurav</script>
vri
 
Time Complexity – O(N) Each element gets added to the frequency table only once which takes O(1) and is appended to string which also takes O(1).
imdhruvgupta
29AjayKumar
ukasp
todaysgaurav
ankita_saini
kk9826225
frequency-counting
Technical Scripter 2018
Competitive Programming
Strings
Strings
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Bits manipulation (Important tactics)
Formatted output in Java
Algorithm Library | C++ Magicians STL Algorithm
How to begin with Competitive Programming?
Use of FLAG in programming
Reverse a string in Java
Write a program to reverse an array or string
Longest Common Subsequence | DP-4
Write a program to print all permutations of a given string
C++ Data Types