Skip to content
Related Articles

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

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

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




<?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
?>
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 <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;
}

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




<?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
?>
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
Recommended Articles
Page :