Given string str consisting of lowercase alphabets, the task is to find the maximum repeating character obtained for every character of the string. If for any index, more than one character has occurred a maximum number of times, then print the character which had occurred most recently.
Examples:
Input: str = “abbc”
Output:
a -> 1
b -> 1
b -> 2
b -> 2
Explanation:
str[0] = ‘a’. Therefore, print a -> 1.
str[1] = ‘b’. Now ‘a’ and ‘b’ have equal frequency. Since, ‘b’ is the most recently occurring character, print b -> 1.
str[2] = ‘b’. Since ‘b’is the most repeating character, print b -> 2.
str[3] = ‘c’. Since ‘b’is the most repeating character, print b -> 2.Input: str = “htdddg”
Output:h -> 1
t -> 1
d -> 1
d -> 2
d -> 3
d -> 3
Approach: Follow the steps given below to solve the problem:
- Initialize an array, say freq[] to store the frequency of each distinct character in the string.
- Initialize two variables, say max, charMax to store the frequency of maximum repeating character and the maximum repeating character respectively.
- Traverse the string and update the frequency of current character, update the value of max and charMax.
- Finally, print the value of charMax and max after every character traversal.
Below is the implementation of the above approach:
// C++ Program to implement // the above approach #include <bits/stdc++.h> using namespace std;
// Function to print the // maximum repeating // character at each index // of the String void findFreq(string str,
int N)
{ // Stores frequency of
// each distinct character
int freq[256];
memset (freq, 0,
sizeof (freq));
// Stores frequency of
// maximum repeating
// character
int max = 0;
// Stores the character having
// maximum frequency
char charMax = '0' ;
// Traverse the String
for ( int i = 0; i < N; i++)
{
// Stores current character
char ch = str[i];
// Update the frequency of str[i]
freq[ch]++;
// If frequency of current
// character exceeds max
if (freq[ch] >= max)
{
// Update max
max = freq[ch];
// Update charMax
charMax = ch;
}
// Print the required output
cout<< charMax << "->" <<
max << endl;
}
} // Driver Code int main()
{ string str = "abbc" ;
// Stores length of str
int N = str.size();
findFreq(str, N);
} // This code is contributed by Rajput-Ji |
// Java program to implement // the above approach import java.util.*;
public class GFG {
// Function to print the maximum repeating
// character at each index of the string
public static void findFreq(String str,
int N)
{
// Stores frequency of
// each distinct character
int [] freq = new int [ 256 ];
// Stores frequency of maximum
// repeating character
int max = 0 ;
// Stores the character having
// maximum frequency
char charMax = '0' ;
// Traverse the string
for ( int i = 0 ; i < N; i++) {
// Stores current character
char ch = str.charAt(i);
// Update the frequency of str[i]
freq[ch]++;
// If frequency of current
// character exceeds max
if (freq[ch] >= max) {
// Update max
max = freq[ch];
// Update charMax
charMax = ch;
}
// Print the required output
System.out.println(
charMax + " -> " + max);
}
}
// Driver Code
public static void main(String[] args)
{
String str = "abbc" ;
// Stores length of str
int N = str.length();
findFreq(str, N);
}
} |
# Python3 program to implement # the above approach # Function to print the maximum repeating # character at each index of the string def findFreq(strr, N):
# Stores frequency of
# each distinct character
freq = [ 0 ] * 256
# Stores frequency of maximum
# repeating character
max = 0
# Stores the character having
# maximum frequency
charMax = '0'
# Traverse the string
for i in range (N):
# Stores current character
ch = ord (strr[i])
# Update the frequency of strr[i]
freq[ch] + = 1
# If frequency of current
# character exceeds max
if (freq[ch] > = max ):
# Update max
max = freq[ch]
# Update charMax
charMax = ch
# Print the required output
print ( chr (charMax), "->" , max )
# Driver Code if __name__ = = '__main__' :
strr = "abbc"
# Stores length of strr
N = len (strr)
findFreq(strr, N)
# This code is contributed by mohit kumar 29 |
// C# program to implement // the above approach using System;
class GFG{
// Function to print the maximum repeating // character at each index of the string public static void findFreq(String str,
int N)
{ // Stores frequency of
// each distinct character
int [] freq = new int [256];
// Stores frequency of maximum
// repeating character
int max = 0;
// Stores the character having
// maximum frequency
char charMax = '0' ;
// Traverse the string
for ( int i = 0; i < N; i++)
{
// Stores current character
char ch = str[i];
// Update the frequency of
// str[i]
freq[ch]++;
// If frequency of current
// character exceeds max
if (freq[ch] >= max)
{
// Update max
max = freq[ch];
// Update charMax
charMax = ch;
}
// Print the required output
Console.WriteLine(charMax +
" -> " + max);
}
} // Driver Code public static void Main(String[] args)
{ String str = "abbc" ;
// Stores length of str
int N = str.Length;
findFreq(str, N);
} } // This code is contributed by shikhasingrajput |
<script> // JavaScript Program to implement // the above approach // Function to print the // maximum repeating // character at each index // of the String function findFreq(str, N) {
// Stores frequency of
// each distinct character
let freq = new Array(256).fill(0);
// Stores frequency of
// maximum repeating
// character
let max = 0;
// Stores the character having
// maximum frequency
let charMax = '0' ;
// Traverse the String
for (let i = 0; i < N; i++) {
// Stores current character
let ch = str[i].charCodeAt(0);
// Update the frequency of str[i]
freq[ch]++;
// If frequency of current
// character exceeds max
if (freq[ch] >= max) {
// Update max
max = freq[ch];
// Update charMax
charMax = ch;
}
// Print the required output
document.write(String.fromCharCode(charMax) + "->" +
max + "<br>" );
}
} // Driver Code let str = "abbc" ;
// Stores length of str let N = str.length; findFreq(str, N); // This code is contributed by gfgking </script> |
a -> 1 b -> 1 b -> 2 b -> 2
Time Complexity: O(N)
Auxiliary Space: O(1)