C# program to find the most frequent element

Finding the most frequent element in a string is a common programming problem that involves counting the occurrences of each character and determining which appears most often. In C#, this can be efficiently solved using an array to track character frequencies.

Syntax

Following is the basic approach to count character frequencies −

int[] frequency = new int[256]; // ASCII character set
for (int i = 0; i < str.Length; i++) {
    frequency[str[i]]++;
}

Using Array-Based Frequency Counting

The most straightforward approach uses an integer array where each index corresponds to an ASCII character value. We increment the count at the character's ASCII position for each occurrence −

using System;

class Demo {
    static int maxCHARS = 256;
    
    static void calculate(String s, int[] cal) {
        for (int i = 0; i < s.Length; i++)
            cal[s[i]]++;
    }

    public static void Main() {
        String s = "thisisit!";
        int[] cal = new int[maxCHARS];
        calculate(s, cal);
        
        Console.WriteLine("Characters with frequency > 1:");
        for (int i = 0; i < maxCHARS; i++)
            if (cal[i] > 1) {
                Console.WriteLine("Character " + (char)i);
                Console.WriteLine("Occurrence = " + cal[i] + " times");
            }
    }
}

The output of the above code is −

Characters with frequency > 1:
Character i
Occurrence = 3 times
Character s
Occurrence = 2 times
Character t
Occurrence = 2 times

Finding the Single Most Frequent Character

To find only the character with the highest frequency, we can modify the approach to track the maximum count and corresponding character −

using System;

class MostFrequent {
    static int maxCHARS = 256;
    
    static char findMostFrequent(String s) {
        int[] frequency = new int[maxCHARS];
        
        // Count frequencies
        for (int i = 0; i < s.Length; i++)
            frequency[s[i]]++;
        
        // Find character with maximum frequency
        int maxCount = 0;
        char mostFrequentChar = '\0';
        
        for (int i = 0; i < maxCHARS; i++) {
            if (frequency[i] > maxCount) {
                maxCount = frequency[i];
                mostFrequentChar = (char)i;
            }
        }
        
        Console.WriteLine("Most frequent character: '" + mostFrequentChar + "' appears " + maxCount + " times");
        return mostFrequentChar;
    }

    public static void Main() {
        String text = "programming";
        char result = findMostFrequent(text);
        Console.WriteLine("Result: " + result);
    }
}

The output of the above code is −

Most frequent character: 'r' appears 2 times
Result: r

Using Dictionary for Dynamic Character Sets

For strings with a wider range of characters or when memory efficiency is important, a Dictionary provides a more flexible solution −

using System;
using System.Collections.Generic;
using System.Linq;

class FrequencyCounter {
    static void findMostFrequentWithDictionary(string text) {
        Dictionary<char, int> frequency = new Dictionary<char, int>();
        
        // Count character frequencies
        foreach (char c in text) {
            if (frequency.ContainsKey(c))
                frequency[c]++;
            else
                frequency[c] = 1;
        }
        
        // Find the most frequent character
        var mostFrequent = frequency.OrderByDescending(x => x.Value).First();
        
        Console.WriteLine("Text: " + text);
        Console.WriteLine("Most frequent character: '" + mostFrequent.Key + "' appears " + mostFrequent.Value + " times");
        
        // Display all characters with their frequencies
        Console.WriteLine("\nAll character frequencies:");
        foreach (var pair in frequency.OrderByDescending(x => x.Value)) {
            Console.WriteLine("'" + pair.Key + "': " + pair.Value + " times");
        }
    }

    public static void Main() {
        string sample = "hello world";
        findMostFrequentWithDictionary(sample);
    }
}

The output of the above code is −

Text: hello world
Most frequent character: 'l' appears 3 times

All character frequencies:
'l': 3 times
' ': 1 times
'd': 1 times
'e': 1 times
'h': 1 times
'o': 2 times
'r': 1 times
'w': 1 times

Comparison of Approaches

Approach Space Complexity Time Complexity Best Use Case
Array-based O(256) - Fixed O(n) ASCII characters only
Dictionary-based O(k) - k unique chars O(n) Unicode or memory efficiency

Conclusion

Finding the most frequent element in a string can be accomplished using either array-based frequency counting for ASCII characters or Dictionary collections for broader character sets. The array approach offers constant-time access but uses fixed memory, while Dictionary provides flexibility for any character set with dynamic memory usage.

Updated on: 2026-03-17T07:04:35+05:30

1K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements