Skip to content
TheCScience
TheCScience
  • Home
  • Human values
  • NCERT Solutions
  • HackerRank solutions
    • HackerRank Algorithms problems solutions
    • HackerRank C solutions
    • HackerRank C++ solutions
    • HackerRank Java problems solutions
    • HackerRank Python problems solutions
TheCScience
HackerRank Bigger is Greater Problem Solution

HackerRank Bigger is Greater Problem Solution

Yashwant Parihar, April 18, 2023April 19, 2023

In this post, we will solve HackerRank Bigger is Greater Problem Solution.

Lexicographical order is often known as alphabetical order when dealing with strings. A string is greater than another string if it comes later in a lexicographically sorted list.

Given a word, create a new word by swapping some or all of its characters. This new word must meet two criteria:

  • It must be greater than the original word
  • It must be the smallest word that meets the first condition

Example
w = abcd
The next largest word is abdc.
Complete the function biggerlsGreater below to create and return the new string meeting
the criteria. If it is not possible, return no answer.

Function Description
Complete the biggerlsGreater function in the editor below.
biggerlsGreater has the following parameter(s):

  • string w: a word
    Return
  • string: the smallest lexicographically higher string possible or no answer

Input Format
The first line of input contains T, the number of test cases.
Each of the next T lines contains w.

Sample Input 0

5
ab
bb
hefg
dhck
dkhc

Sample Output 0

ba
no answer
hegf
dhkc
hcdk

Explanation 0

  • Test case 1:
    ba is the only string which can be made by rearranging ab. It is greater.
  • Test case 2:
    It is not possible to rearrange bb and get a greater string.
  • Test case 3:
    hegf is the next string greater than hefg.
  • Test case 4:
    dhkc is the next string greater than dhck.
  • Test case 5:
    hcdk is the next string greater than dkhc.

Sample Input 1

6
lmno
dcba
dcbb
abdc
abcd
fedcbabcd

Sample Output 1

lmon
no answer
no answer
acbd
abdc
fedcbabdc
HackerRank Bigger is Greater Problem Solution
HackerRank Bigger is Greater Problem Solution

Bigger is Greater C Solution

#include <stdio.h>
#include <string.h>
void Merge(int *arr,int left,int mid,int right)
{
  int newArray[right-left+1];
  int pos=0,lpos=left,rpos=mid+1;
  while(lpos<=mid && rpos<=right)
  {
    if(arr[lpos]<arr[rpos])
    {
      newArray[pos++]=arr[lpos++];
    }
    else
    {
      newArray[pos++]=arr[rpos++];
    }
  }
  while(lpos<=mid)
  {
    newArray[pos++]=arr[lpos++];
  }
  while(rpos<=right)
  {
    newArray[pos++]=arr[rpos++];
  }
  int i;
  for(i=0;i<pos;i++)
  {
    arr[i+left]=newArray[i];
  }
  return;
}

void MergeSort(int *arr,int left,int right)
{
  int mid;
  mid=(left+right)/2;
  if(left<right)
  {
    MergeSort(arr,left,mid);
    MergeSort(arr,mid+1,right);
    Merge(arr,left,mid,right);
  }
  return;
}

int main()
{
	int t,i,j,note,index,no;
	char w[100];
	scanf("%d",&t);
	while(t--)
	{
		char temp;
		int temp_c,flag=0;
		int count=0,len_w=0;
		scanf("%s",w);
		len_w=strlen(w);
		note=0;
		for(i=len_w-1;i>0;i--)
		{
			temp=i;
			if(w[--temp]<w[i])
			{				
				temp_c=w[temp]-97;
				note=temp;
				break;
			}
			flag++;
		}
		
		int arr[len_w-note];
		for(i=0;i<len_w-note;i++)
		{			
			arr[i]=w[temp]-97;
			temp++;
		}
		//printf("sade\n");
		MergeSort(arr,0,len_w-note-1);
		
			
		for(i=0;i<len_w-note;i++)
		{
			if(arr[i]>temp_c)
			{
				 index=i;
				 no=arr[i];
				 break;
			}
		}
		if(flag==len_w-1)
			printf("no answer\n");
		else
		{
		for(i=0;i<note;i++)
		{
			printf("%c",w[i] );
		}
		printf("%c",no+97 );
		for(i=0;i<len_w-note;i++)
		{
			if(i!=index)
				printf("%c",arr[i]+97 );
		}
		printf("\n");
		}
	}//madarchod
	return 0;
}

Bigger is Greater C++ Solution

#include <bits/stdc++.h>
#define MAX_N 150 
#define oo 200 

using namespace std;

int test; 
int n; 
string s; 
char a[MAX_N]; 

int main ()
{
	ios :: sync_with_stdio(false);
	cin.tie(0); 
	
	cin >> test; 
	
	while (test--)
	{
		cin >> s; 
		
		n = s.size(); int flag = 0; int pos; 
		
		for (int i = 1; i <= n; i++) a[i] = s[i - 1]; 
		
		for (int i = n - 1; i >= 1; i--) 
		{
			int mini = oo; int p;  
			
			for (int j = i + 1; j <= n; j++) 
				if (a[i] < a[j]) 
				{
					flag = 1; 
					if (mini > a[j]) 
					{
						mini = a[j]; 
						p = j; 
					}
				}
				
			if (flag) 
			{
				//cout << p << endl; 
				pos = i; 
				swap(a[i] , a[p]); 
				break; 
			}
		}
		
		if (!flag) cout << "no answer"; 
		else 
		{
			//cout << pos << endl; 
			sort(a + pos + 1, a + n + 1); 
			
			for (int i = 1; i <= n; i++) cout << a[i]; 
		}
		
		cout << endl; 
	}
	return 0;
}

Bigger is Greater C Sharp Solution

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
class Solution {
    static void Main(String[] args) {
        int charSpace = (int)'z'-(int)'a'+1;        
        int cases = int.Parse(Console.ReadLine());
        
        for(int j =0; j< cases; j++)
        {
            int[] charsToRearrange = new int[charSpace];
            string word = Console.ReadLine();
            
            char last = word[word.Length-1];
            int turningPoint = -1;
            for(int i = word.Length-2; i>=0; i--)
                {
                int lastIndex = getIndex(last);
                charsToRearrange[lastIndex]++;
                if((int)last > (int)word[i])
                {
                    turningPoint = i;
                    break;
                }   
                last = word[i];
            }
            if(turningPoint == -1)
                {
                Console.WriteLine("no answer");
                continue;
            }
            StringBuilder output = new StringBuilder();
            
            output.Append(word.Substring(0,turningPoint));
            
            int indexAfterTurningPoint = getIndex(word[turningPoint]) + 1;
            
            for(int i = indexAfterTurningPoint; i< charSpace ; i++)
                {
                if(charsToRearrange[i]>0)
                    {
                        charsToRearrange[getIndex(word[turningPoint])]++;
                        output.Append(getChar(i));
                        charsToRearrange[i]--;
                        break;
                    }
            }
            
            for(int i = 0 ; i< charSpace; i++)
                {
                while(charsToRearrange[i]>0)
                    {
                        output.Append(getChar(i));
                        charsToRearrange[i]--;                        
                    }
            }
            Console.WriteLine(output.ToString());
        }
    }
    
    static char getChar(int index)
    {
        return (char) (index + (int)'a');
    }
    
    static int getIndex(char character)
    {
        return (int)character - (int)'a';
    }
}

Bigger is Greater Java Solution

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;
import java.util.regex.*;
import java.util.stream.*;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;

class Result {

    /*
     * Complete the 'biggerIsGreater' function below.
     *
     * The function is expected to return a STRING.
     * The function accepts STRING w as parameter.
     */

    public static String biggerIsGreater(String w) {
    // Write your code here
 if (w.length() <= 1) {
            return "no answer";
        }
        StringBuilder stringBuilder = new StringBuilder(w);
        boolean done = false;
        int indexToSwap = stringBuilder.length()-1;
        for (int i = stringBuilder.length()-1; i > 0 ; i--) {
            int a = stringBuilder.charAt(i-1);
            int b = stringBuilder.charAt(i);
            if (b > a) {
                indexToSwap = i - 1;
                done = true;
                break;
            }
        }
        if (!done) {
            return "no answer";
        }
        int charToSwap = stringBuilder.charAt(indexToSwap);
        int charLeastExceeding = stringBuilder.charAt(indexToSwap + 1);
        int indexLeastButExceeding = indexToSwap + 1;
        for (int i = indexToSwap + 1; i < stringBuilder.length(); i++) {
            int currentChar = stringBuilder.charAt(i);
            if (currentChar > charToSwap && currentChar < charLeastExceeding) {
                charLeastExceeding = currentChar;
                indexLeastButExceeding = i;
            }
        }
        stringBuilder.setCharAt(indexToSwap, (char)charLeastExceeding);
        stringBuilder.setCharAt(indexLeastButExceeding, (char)charToSwap);
        List<Character> chars = new ArrayList<>();
        for (int i = indexToSwap + 1; i < stringBuilder.length(); i++) {
            chars.add(stringBuilder.charAt(i));
        }
        Collections.sort(chars);
        for (int i = 0; i < chars.size(); i++) {
            stringBuilder.setCharAt(indexToSwap + 1 + i, chars.get(i));
        }
        return stringBuilder.toString();
    }

}

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));

        int T = Integer.parseInt(bufferedReader.readLine().trim());

        IntStream.range(0, T).forEach(TItr -> {
            try {
                String w = bufferedReader.readLine();

                String result = Result.biggerIsGreater(w);

                bufferedWriter.write(result);
                bufferedWriter.newLine();
            } catch (IOException ex) {
                throw new RuntimeException(ex);
            }
        });

        bufferedReader.close();
        bufferedWriter.close();
    }
}

Bigger is Greater JavaScript Solution

function processData(input) {
    var tests = input.split('\n');
    tests.shift();
    tests.forEach(function (str) {
        var lex = getLexBigger (str);
        if (!lex)
            console.log('no answer');
        else
            console.log(lex);  
    });
} 
/*
    Find largest index i such that array[i − 1] < array[i].
    Find largest index j such that j ≥ i and array[j] > array[i − 1].
    Swap array[j] and array[i − 1].
    Reverse the suffix starting at array[i].
*/
function getLexBigger (str) {
    var strArr = str.split('');
    var i = strArr.length-1;
    // aaaaaaaabbbccddeeeed i=19
    //console.log('i1:'+i)
    // [a,b] i=1
    // [k,u,e,m,g,b] i=5
    while (i > 0 && strArr[i-1] >= strArr[i]) {
        i--;
    }
    //console.log('i2:'+i)
    // aaaaaaaabbbccddeeeed i=15
    // [a,b] i=1
    // [k,u,e,m,g,b] i=3
    
    if (i === 0)
        return null;
    
    var j = strArr.length-1;
    //console.log('j1:'+j)
    // [a,b] i=1 j=1
    // [k,u,e,m,g,b] i=3 j=5
    while (j > i && strArr[j] <= strArr[i-1]) {
        j--;
    }
    //console.log('j2:'+j)
    // [k,u,e,m,g,b] i=3 j=4 i-1=e

    if (j >= i) {
        //console.log('swap:'+strArr[i-1] + ' > ' + strArr[j])
        var temp = strArr[i-1];
        strArr[i-1] = strArr[j];
        strArr[j] = temp;
    }
    //           [k,u,g,m,e,b] i=3 j=4 i-1=e
    // should be [k,u,m,e,g,b]
    // next reverse end of array
    var tempArr = strArr.splice(i, strArr.length);
    tempArr.reverse();
    strArr = strArr.concat(tempArr)
    //           [k,u,g,b,e,m] i=3 j=4 i-1=e
    // should be [k,u,m,e,g,b]
    
    return strArr.join('');
   
 }  

process.stdin.resume();
process.stdin.setEncoding("ascii");
_input = "";
process.stdin.on("data", function (input) {
    _input += input;
});

process.stdin.on("end", function () {
   processData(_input);
});

Bigger is Greater Python Solution

def bigger(string):
    arr = list(string)
    index = None
    for i in range(0, len(arr)-1)[::-1]:
        if arr[i] < arr[i+1]:
            index = i
            break
    if index is None:
        return 'no answer'
    for i in range(index, len(arr))[::-1]:
        if arr[i] > arr[index]:
            arr[index], arr[i] = arr[i], arr[index]
            break
    lo, hi = index+1, len(arr)-1
    while lo < hi:
        arr[lo], arr[hi] = arr[hi], arr[lo]
        lo, hi = lo+1, hi-1
    res = ''.join(arr)
    return res

if __name__ == '__main__':
    T = int(input())
    for _ in range(T):
        s = input().rstrip()
        print(bigger(s))

Other Solutions

  • HackerRank Modified Kaprekar Numbers Solution
  • HackerRank Beautiful Triplets Problem Solution
c C# C++ HackerRank Solutions java javascript python CcppCSharpHackerrank Solutionsjavajavascriptpython

Post navigation

Previous post
Next post

Leave a Reply

You must be logged in to post a comment.

  • HackerRank Dynamic Array Problem Solution
  • HackerRank 2D Array – DS Problem Solution
  • Hackerrank Array – DS Problem Solution
  • Von Neumann and Harvard Machine Architecture
  • Development of Computers
©2025 TheCScience | WordPress Theme by SuperbThemes