Greatest String

Java Program to find lexicographically greatest string

You are given a string S and an integer Q. You are allowed to perform at most Q operations on the string. In one operation, you can change any vowel to it's next character (e.g., 'a'->'b', 'e'->'f', 'i'->'j', 'o'->'p', 'u'->'v'). Generate the lexicographically greatest string by performing at most Q operations on string S.
Note- Vowels in English alphabet are- 'a','e','i','o','u'.
Input Format:
First line contains an integer T denoting the number of test cases .
For each test case,in first line you will be given the string S and in second line an integer Q (maximum number of operations allowed).
Output Format:
For each test case , print the lexicographically greatest string that can be formed after applying at most Q operations on the given string.
Answer for each test case should come in a new line.
Constraints:
String will consist of only lowercase English alphabets.
SAMPLE INPUT
2
abcde
3
xyzwu
0
SAMPLE OUTPUT
bbcdf
xyzwu


Explanation
For case 1:
We have string "abcde" and we are allowed to perform at max 3 operations, we can form lexicographically greatest string by applying the operation on first and last character of string by changing the string to "bbcdf",which is lexicographically greatest.

For Case 2:
We are not allowed to do any operations, so the answer will be the string itself.


Program:

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class greatest_string
{
public static void main(String args[]) throws Exception
{
int i, j, Q, k, count=0;
char c;
String str;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  int T = Integer.parseInt(br.readLine());
if(T < 1 || T > 10)
{
return;
}
for(i=0; i<T; i++)
{
str = br.readLine().toLowerCase();
Q = Integer.parseInt(br.readLine());
count=0;
if(Q!=0)
{
for(j=0; j<str.length(); j++)
{
if(str.charAt(j) == 'a' || str.charAt(j) == 'e' ||  str.charAt(j) == 'i' || str.charAt(j) == 'o' || str.charAt(j) == 'u' )
{
c = str.charAt(j);
c++;
str = str.replaceFirst(String.valueOf(str.charAt(j)), String.valueOf(c));
count++;
if(count == Q)
break;
}
}
}

System.out.println(str);
}
}

}



Output:




 

Comments

Popular Posts