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 wordIt must be the smallest word that meets the first conditionExamplew = abcdThe next largest word is abdc.Complete the function biggerlsGreater below to create and return the new string meetingthe criteria. If it is not possible, return no answer.Function DescriptionComplete the biggerlsGreater function in the editor below.biggerlsGreater has the following parameter(s):string w: a wordReturnstring: the smallest lexicographically higher string possible or no answerInput FormatThe first line of input contains T, the number of test cases.Each of the next T lines contains w.Sample Input 05 ab bb hefg dhck dkhc Sample Output 0ba no answer hegf dhkc hcdk Explanation 0Test 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 16 lmno dcba dcbb abdc abcd fedcbabcd Sample Output 1lmon no answer no answer acbd abdc fedcbabdcHackerRank Bigger is Greater Problem SolutionBigger 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 Solutionusing 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 Solutionimport 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 Solutionfunction 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 Solutiondef 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 SolutionsHackerRank Modified Kaprekar Numbers SolutionHackerRank Beautiful Triplets Problem Solution c C# C++ HackerRank Solutions java javascript python CcppCSharpHackerrank Solutionsjavajavascriptpython