Related Articles
Number of Larger Elements on right side in a string
• Difficulty Level : Easy
• Last Updated : 20 May, 2019

Given a string, find count of number of larger alphabets for every character of the string.

Examples:

```Input  : str = "abcd"
Output : 3 2 1 0
There are 3 greater characters on right of 'a',
2 greater characters on right of 'b', 1 greater
character on right of 'c' and 0 greater characters
on right of 'd'.

Input :  geeks
Output : 2 2 2 1 0
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

A naive approach is to use two for loops. First will keep track of each alphabet in string and second loop will be used to find no of larger alphabet according to ASCII values.

## C++

 `// CPP program to find counts of right greater``// characters for every character.``#include ``using` `namespace` `std;`` ` `void` `printGreaterCount(string str)``{``    ``int` `len = str.length(), right[len] = { 0 };``    ``for` `(``int` `i = 0; i < len; i++)``        ``for` `(``int` `j = i + 1; j < len; j++)``            ``if` `(str[i] < str[j])``                ``right[i]++;`` ` `    ``for` `(``int` `i = 0; i < len; i++)``        ``cout << right[i] << ``" "``;``}`` ` `// Driver code``int` `main()``{``    ``string str = ``"abcd"``;``    ``printGreaterCount(str);``    ``return` `0;``}`

## Java

 `// Java program to find counts of right greater``// characters for every character.``class` `GFG {`` ` `    ``static` `void` `printGreaterCount(String str)``    ``{``        ``int` `len = str.length(), right[] = ``new` `int``[len];``        ``for` `(``int` `i = ``0``; i < len; i++) {``            ``for` `(``int` `j = i + ``1``; j < len; j++) {``                ``if` `(str.charAt(i) < str.charAt(j)) {``                    ``right[i]++;``                ``}``            ``}``        ``}`` ` `        ``for` `(``int` `i = ``0``; i < len; i++) {``            ``System.out.print(right[i] + ``" "``);``        ``}``    ``}`` ` `    ``// Driver code``    ``public` `static` `void` `main(String[] args)``    ``{``        ``String str = ``"abcd"``;``        ``printGreaterCount(str);``    ``}``}``// This code is contributed Rajput-Ji`

## Python3

 `# Python3 program to find counts of right ``# greater characters for every character.`` ` `def` `printGreaterCount(``str``):``    ``len__ ``=` `len``(``str``)``    ``right ``=` `[``0` `for` `i ``in` `range``(len__)] ``    ``for` `i ``in` `range``(len__):``        ``for` `j ``in` `range``(i ``+` `1``, len__, ``1``):``            ``if` `(``str``[i] < ``str``[j]):``                ``right[i] ``+``=` `1`` ` `    ``for` `i ``in` `range``(len__):``        ``print``(right[i], end ``=` `" "``)`` ` `# Driver code``if` `__name__ ``=``=` `'__main__'``:``    ``str` `=` `"abcd"``    ``printGreaterCount(``str``)``     ` `# This code is contributed by``# Sahil_Shelangia`

## C#

 `// C# program to find counts of right greater``// characters for every character.``using` `System;``public` `class` `GFG {`` ` `    ``static` `void` `printGreaterCount(String str)``    ``{``        ``int` `len = str.Length;``        ``int``[] right = ``new` `int``[len];``        ``for` `(``int` `i = 0; i < len; i++) {``            ``for` `(``int` `j = i + 1; j < len; j++) {``                ``if` `(str[i] < str[j]) {``                    ``right[i]++;``                ``}``            ``}``        ``}`` ` `        ``for` `(``int` `i = 0; i < len; i++) {``            ``Console.Write(right[i] + ``" "``);``        ``}``    ``}`` ` `    ``// Driver code``    ``public` `static` `void` `Main()``    ``{``        ``String str = ``"abcd"``;``        ``printGreaterCount(str);``    ``}``}``// This code is contributed by 29AjayKumar`

## PHP

 ``
Output:
```3 2 1 0
```

Time Complexity : O(N * N)

An efficient approach is to traverse the string from right and keep track of counts of characters from right side. For every character that we traverse from right, we increment its count in count array and add counts of all greater characters to answer for this character.

## C++

 `// C++ program to count greater characters on right``// side of every character.``#include ``using` `namespace` `std;``#define MAX_CHAR 26`` ` `void` `printGreaterCount(string str)``{``    ``int` `len = str.length();`` ` `    ``// Arrays to store result and character counts.``    ``int` `ans[len] = { 0 }, count[MAX_CHAR] = { 0 };`` ` `    ``// start from right side of string``    ``for` `(``int` `i = len - 1; i >= 0; i--) {``        ``count[str[i] - ``'a'``]++;``        ``for` `(``int` `j = str[i] - ``'a'` `+ 1; j < MAX_CHAR; j++)``            ``ans[i] += count[j];``    ``}`` ` `    ``for` `(``int` `i = 0; i < len; i++)``        ``cout << ans[i] << ``" "``;``}`` ` `// Driver code``int` `main()``{``    ``string str = ``"abcd"``;``    ``printGreaterCount(str);``    ``return` `0;``}`

## Java

 `// Java program to count greater characters on right``// side of every character.``public` `class` `GFG {`` ` `    ``final` `static` `int` `MAX_CHAR = ``26``;`` ` `    ``static` `void` `printGreaterCount(String str)``    ``{``        ``int` `len = str.length();`` ` `        ``// Arrays to store result and character counts.``        ``int` `ans[] = ``new` `int``[len], count[] = ``new` `int``[MAX_CHAR];`` ` `        ``// start from right side of string``        ``for` `(``int` `i = len - ``1``; i >= ``0``; i--) {``            ``count[str.charAt(i) - ``'a'``]++;``            ``for` `(``int` `j = str.charAt(i) - ``'a'` `+ ``1``; j < MAX_CHAR; j++) {``                ``ans[i] += count[j];``            ``}``        ``}`` ` `        ``for` `(``int` `i = ``0``; i < len; i++) {``            ``System.out.print(ans[i] + ``" "``);``        ``}``    ``}`` ` `    ``// Driver code``    ``static` `public` `void` `main(String[] args)``    ``{``        ``String str = ``"abcd"``;``        ``printGreaterCount(str);``    ``}``}`

## Python3

 `# Python3 program to count greater characters on right``# side of every character.`` ` `MAX_CHAR``=``26``;`` ` `def` `printGreaterCount(str1):``     ` `    ``len1 ``=` `len``(str1);`` ` `    ``# Arrays to store result and character counts.``    ``ans``=``[``0``]``*``len1;``    ``count``=``[``0``]``*``MAX_CHAR;`` ` `    ``# start from right side of string``    ``for` `i ``in` `range``(len1 ``-` `1``,``-``1``,``-``1``):``        ``count[``ord``(str1[i]) ``-` `ord``(``'a'``)]``+``=``1``;``        ``for` `j ``in` `range``(``ord``(str1[i]) ``-` `ord``(``'a'``) ``+` `1``,MAX_CHAR):``            ``ans[i] ``+``=` `count[j];`` ` `    ``for` `i ``in` `range``(len1):``        ``print``(ans[i],end``=``" "``);`` ` `# Driver code``str1 ``=` `"abcd"``;``printGreaterCount(str1);`` ` `# This code is contributed by mits`

## C#

 `// C# program to count greater characters on right``// side of every character.``using` `System;`` ` `class` `GFG {`` ` `    ``static` `int` `MAX_CHAR = 26;`` ` `    ``static` `void` `printGreaterCount(``string` `str)``    ``{``        ``int` `len = str.Length;`` ` `        ``// Arrays to store result and character counts.``        ``int``[] ans = ``new` `int``[len];``        ``int``[] count = ``new` `int``[MAX_CHAR];`` ` `        ``// start from right side of string``        ``for` `(``int` `i = len - 1; i >= 0; i--) {``            ``count[str[i] - ``'a'``]++;``            ``for` `(``int` `j = str[i] - ``'a'` `+ 1; j < MAX_CHAR; j++) {``                ``ans[i] += count[j];``            ``}``        ``}`` ` `        ``for` `(``int` `i = 0; i < len; i++) {``            ``Console.Write(ans[i] + ``" "``);``        ``}``    ``}`` ` `    ``// Driver code``    ``static` `void` `Main()``    ``{``        ``string` `str = ``"abcd"``;``        ``printGreaterCount(str);``    ``}``}`` ` `// This code is contributed by mits`

## PHP

 `= 0; ``\$i``--) ``    ``{``        ``\$count``[ord(``\$str``[``\$i``]) - ord(``'a'``)]++;``        ``for` `(``\$j` `= ord(``\$str``[``\$i``]) - ord(``'a'``) + 1; ``\$j` `< ``\$MAX_CHAR``; ``\$j``++)``            ``\$ans``[``\$i``] += ``\$count``[``\$j``];``    ``}`` ` `    ``for` `(``\$i` `= 0; ``\$i` `< ``\$len``; ``\$i``++)``        ``echo` `\$ans``[``\$i``].``" "``;``}`` ` `    ``// Driver code``    ``\$str` `= ``"abcd"``;``    ``printGreaterCount(``\$str``);`` ` `// This code is contributed by mits``?>`
Output:
```3 2 1 0
```

Time Complexity : O(N)

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