স্ট্রিং-এ প্রতিটি অক্ষর কতবার থাকছে তা গণনা করতে অ্যারে বা ডিকশনারি ব্যবহার করা হয়। ASCII ক্যারেক্টারের জন্য ২৫৬ আকারের ইন্ট অ্যারে দ্রুততম।
অ্যারে-ভিত্তিক পদ্ধতি (দ্রুত, ASCII-সীমাবদ্ধ)
static void CountChars(string s, int[] counts)
{
foreach (char c in s)
counts[c]++;
}
সম্পূর্ণ উদাহরণ
using System;
class CharFrequencyDemo
{
static int MAX_CHARS = 256;
static void Count(string s, int[] freq)
{
foreach (char c in s) freq[c]++;
}
public static void Main()
{
string s = "mynameistomhanks";
int[] freq = new int[MAX_CHARS];
Count(s, freq);
Console.WriteLine("অক্ষর\t\tআবൃত্তি");
for (int i = 0; i < MAX_CHARS; i++)
{
if (freq[i] > 0)
{
Console.WriteLine($"'{ (char)i }'\t\t{freq[i]} {(freq[i] == 1 ? "বার" : "বার")}");
}
}
}
}
আউটপুট
অক্ষর আবൃত্তি
' ' 1 বার
'a' 2 বার
'e' 1 বার
'h' 1 বার
'i' 1 বার
'k' 1 বার
'm' 3 বার
'n' 2 বার
'o' 1 বার
's' 2 বার
't' 1 বার
'y' 1 বার
Unicode সাপোর্টের জন্য Dictionary
var freq = new Dictionary<char, int>();
foreach (char c in s)
freq[c] = freq.GetValueOrDefault(c, 0) + 1;
LINQ এক-লাইনার
var freq = s.GroupBy(c => c).ToDictionary(g => g.Key, g => g.Count());
তুলনা
| পদ্ধতি | সময় | স্পেস | ইউনিকোড |
|---|---|---|---|
| int[256] অ্যারে | O(n) | O(1) | না (ASCII) |
| Dictionary | O(n) | O(k) | হ্যাঁ |
| LINQ GroupBy | O(n log n) | O(k) | হ্যাঁ |