Program to find second most frequent character
Given a string, find the second most frequent character in it. Expected time complexity is O(n) where n is the length of the input string.
Examples:
Input: str = "aabababa"; Output: Second most frequent character is 'b' Input: str = "geeksforgeeks"; Output: Second most frequent character is 'g' Input: str = "geeksquiz"; Output: Second most frequent character is 'g' The output can also be any other character with count 1 like 'z', 'i'. Input: str = "abcd"; Output: No Second most frequent character
A simple solution is to start from the first character, count its occurrences, then second character and so on. While counting these occurrence keep track of max and second max. Time complexity of this solution is O(n2).
We can solve this problem in O(n) time using a count array with size equal to 256 (Assuming characters are stored in ASCII format). Following is the implementation of the approach.
C++
#include <bits/stdc++.h> using namespace std; #define NO_OF_CHARS 256 // CPP function to find the // second most frequent character // in a given string 'str' char getSecondMostFreq(string str) { // count number of occurrences of every character. int count[NO_OF_CHARS] = {0}, i; for (i = 0; str[i]; i++) (count[str[i]])++; // Traverse through the count[] and // find second highest element. int first = 0, second = 0; for (i = 0; i < NO_OF_CHARS; i++) { /* If current element is smaller than first then update both first and second */ if (count[i] > count[first]) { second = first; first = i; } /* If count[i] is in between first and second then update second */ else if (count[i] > count[second] && count[i] != count[first]) second = i; } return second; } // Driver code int main() { string str = "geeksforgeeks" ; char res = getSecondMostFreq(str); if (res != '\0' ) cout << "Second most frequent char is " << res; else cout << "No second most frequent character" ; return 0; } // This code is contributed by rathbhupendra |
chevron_right
filter_none
C
#include <stdio.h> #define NO_OF_CHARS 256 // C function to find the second most frequent character // in a given string 'str' char getSecondMostFreq( char *str) { // count number of occurrences of every character. int count[NO_OF_CHARS] = {0}, i; for (i=0; str[i]; i++) (count[str[i]])++; // Traverse through the count[] and find second highest element. int first = 0, second = 0; for (i = 0; i < NO_OF_CHARS; i++) { /* If current element is smaller than first then update both first and second */ if (count[i] > count[first]) { second = first; first = i; } /* If count[i] is in between first and second then update second */ else if (count[i] > count[second] && count[i] != count[first]) second = i; } return second; } // Driver program to test above function int main() { char str[] = "geeksforgeeks" ; char res = getSecondMostFreq(str); if (res != '\0' ) printf ( "Second most frequent char is %c" , res); else printf ( "No second most frequent character" ); return 0; } |
chevron_right
filter_none
Java
// Java Program to find the second // most frequent character in a given string public class GFG { static final int NO_OF_CHARS = 256 ; // finds the second most frequently occurring // char static char getSecondMostFreq(String str) { // count number of occurrences of every // character. int [] count = new int [NO_OF_CHARS]; int i; for (i= 0 ; i< str.length(); i++) (count[str.charAt(i)])++; // Traverse through the count[] and find // second highest element. int first = 0 , second = 0 ; for (i = 0 ; i < NO_OF_CHARS; i++) { /* If current element is smaller than first then update both first and second */ if (count[i] > count[first]) { second = first; first = i; } /* If count[i] is in between first and second then update second */ else if (count[i] > count[second] && count[i] != count[first]) second = i; } return ( char )second; } // Driver program to test above function public static void main(String args[]) { String str = "geeksforgeeks" ; char res = getSecondMostFreq(str); if (res != '\0' ) System.out.println( "Second most frequent char" + " is " + res); else System.out.println( "No second most frequent" + "character" ); } } // This code is contributed by Sumit Ghosh |
chevron_right
filter_none
Python 3
# Python 3 Program to find the # second most frequent character # in a given string # Function to find the second # most frequent character # in a given string 'str' def getSecondMostFreq( str ) : NO_OF_CHARS = 256 # Initialize count list of # 256 size with value 0 count = [ 0 ] * NO_OF_CHARS # count number of occurrences # of every character. for i in range ( len ( str )) : count[ ord ( str [i])] + = 1 first, second = 0 , 0 # Traverse through the count[] # and find second highest element. for i in range (NO_OF_CHARS) : # If current element is smaller # than first then update both # first and second if count[i] > count[first] : second = first first = i # If count[i] is in between # first and second # then update second */ elif (count[i] > count[second] and count[i] ! = count[first] ) : second = i # return character return chr (second) # Driver code if __name__ = = "__main__" : str = "geeksforgeeks" # function calling res = getSecondMostFreq( str ) if res ! = '\0' : print ( "Second most frequent char is" , res) else : print ( "No second most frequent character" ) # This code is contributed by ANKITRAI1 |
chevron_right
filter_none
C#
// C# Program to find the second most frequent // character in a given string using System; public class GFG { static int NO_OF_CHARS = 256; // finds the second most frequently // occurring char static char getSecondMostFreq( string str) { // count number of occurrences of every // character. int []count = new int [NO_OF_CHARS]; for ( int i = 0; i < str.Length; i++) (count[str[i]])++; // Traverse through the count[] and find // second highest element. int first = 0, second = 0; for ( int i = 0; i < NO_OF_CHARS; i++) { /* If current element is smaller than first then update both first and second */ if (count[i] > count[first]) { second = first; first = i; } /* If count[i] is in between first and second then update second */ else if (count[i] > count[second] && count[i] != count[first]) second = i; } return ( char )second; } // Driver program to test above function public static void Main() { string str = "geeksforgeeks" ; char res = getSecondMostFreq(str); if (res != '\0' ) Console.Write( "Second most frequent char" + " is " + res); else Console.Write( "No second most frequent" + "character" ); } } // This code is contributed by nitin mittal. |
chevron_right
filter_none
PHP
<?php $NO_OF_CHARS =256; // PHP function to find the // second most frequent character // in a given string 'str' function getSecondMostFreq( $str ) { global $NO_OF_CHARS ; // count number of occurrences of every character. $count = array_fill (0, $NO_OF_CHARS ,0); for ( $i = 0; $i < strlen ( $str ); $i ++) $count [ord( $str [ $i ])]++; // Traverse through the count[] and // find second highest element. $first = $second = 0; for ( $i = 0; $i < $NO_OF_CHARS ; $i ++) { /* If current element is smaller than first then update both first and second */ if ( $count [ $i ] > $count [ $first ]) { $second = $first ; $first = $i ; } /* If count[i] is in between first and second then update second */ else if ( $count [ $i ] > $count [ $second ] && $count [ $i ] != $count [ $first ]) $second = $i ; } return chr ( $second ); } // Driver code $str = "geeksforgeeks" ; $res = getSecondMostFreq( $str ); if ( strlen ( $res )) echo "Second most frequent char is " . $res ; else echo "No second most frequent character" ; // This code is contributed by mits ?> |
chevron_right
filter_none
Output:
Second most frequent char is g
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
Recommended Posts:
- Return maximum occurring character in an input string
- A Program to check if strings are rotations of each other or not
- Write a program to print all permutations of a given string
- Given a string, find its first non-repeating character
- Write a program to reverse an array or string
- Find the smallest window in a string containing all characters of another string
- Given a number, find the next smallest palindrome
- Program to validate an IP address
- Find if a string is interleaved of two other strings | DP-33
- Find the first non-repeating character from a stream of characters
- Find Excel column name from a given column number
- Given a sorted dictionary of an alien language, find order of characters
- Find if an array of strings can be chained to form a circle | Set 1
- Given two strings, find if first string is a subsequence of second
- Find if a given string can be represented from a substring by iterating the substring “n” times