Skip to content
Related Articles

Related Articles

Lexicographically largest string formed from the characters in range L and R
  • Difficulty Level : Basic
  • Last Updated : 04 Jan, 2019

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++






// 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 string
string 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 til all characters
        // are added
        while (freq[i]) {
            ans += char('a' + i);
            freq[i]--;
        }
    }
  
    return ans;
}
  
// Driver Code
int main()
{
    string s = "striver";
    int l = 3, r = 5;
    cout << printLargestString(s, l, r);
    return 0;
}

Java




// 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 til 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




# 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 string
def 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 til all characters are added
        while (freq[i]):
            ans += chr(ord('a') + i)
            freq[i] -= 1
  
    return ans
  
# Driver Code
if __name__ == "__main__":
      
    s = "striver"
    l = 3
    r = 5
    print(printLargestString(s, l, r))
  
# This code is contributed by ita_c

C#




// C# program to print the lexicographically
// largest String that can be formed from the 
// characters in range L and R
using System;
  
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[i] - 'a']++;
    }
  
    // ans String 
    String ans = "";
  
    // iterate in frequency array 
    for (int i = 25; i >= 0; i--)
    {
  
        // add til all characters 
        // are added 
        while (freq[i] > 0) 
        {
            ans += (char) ('a' + i);
            freq[i]--;
        }
    }
  
    return ans;
}
  
// Driver Code 
public static void Main() 
{
    String s = "striver";
    int l = 3, r = 5;
    Console.Write(printLargestString(s, l, r));
}
}
  
// This code is contributed by 29AjayKumar
Output:
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).

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.  Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price.

In case you wish to attend live classes with industry experts, please refer Geeks Classes Live and Geeks Classes Live USA

My Personal Notes arrow_drop_up
Recommended Articles
Page :