Number of Larger Elements on right side in a string

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

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

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to find counts of right greater
// characters for every character.
#include <bits/stdc++.h>
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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to find counts 
// of right greater characters
// for every character.
  
function printGreaterCount($str)
{
    $len = strlen($str); 
    $right = array_fill(0, $len, 0);
    for ($i = 0; $i < $len; $i++) 
    {
        for ($j = $i + 1; $j < $len; $j++) 
            if ($str[$i] < $str[$j])
                $right[$i]++;
    }
  
    for ($i = 0; $i < $len; $i++)
        echo $right[$i] . " ";
}
  
// Driver code
$str = 'abcd';
printGreaterCount($str);
  
// This code is contributed 
// by Abhinav96
?>

chevron_right


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

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to count greater characters on right
// side of every character.
#include <bits/stdc++.h>
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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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);
    }
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to count greater characters on right
// side of every character.
  
$MAX_CHAR=26;
  
function printGreaterCount($str)
{
    global $MAX_CHAR;
    $len = strlen($str);
  
    // Arrays to store result and character counts.
    $ans=array_fill(0, $len, 0);
    $count=array_fill(0, $MAX_CHAR, 0);
  
    // start from right side of string
    for ($i = $len - 1; $i >= 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
?>

chevron_right


Output:

3 2 1 0

Time Complexity : O(N)



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.