কম্পিউটার টিউটোরিয়াল

C#-এ স্ট্রিংয়ে সর্বাধিক ফ্রিকোয়েন্সি वाला ক্যারেক্টার বের করা

স্ট্রিংয়ে সবচেয়ে বেশি বার আবির্ভূত হওয়া ক্যারেক্টার (Most Frequent Character) বের করার জন্য ফ্রিকোয়েন্সি কাউন্টিং টেকনিক ব্যবহার করা হয়।

অ্যালগরিদম

  1. একটি ফ্রিকোয়েন্সি অ্যারে/ডিকশনারি তৈরি করুন
  2. স্ট্রিংয়ের প্রতিটি ক্যারেক্টার için কাউন্ট বাড়ান
  3. সর্বোচ্চ কাউন্ট वाला ক্যারেক্টার খুঁজুন

সম্পূর্ণ উদাহরণ (অ্যারে ব্যবহার - ASCII)


using System;

class Demo
{
    static int MAX_CHARS = 256;
    
    static void CalculateFrequency(string s, int[] freq)
    {
        for (int i = 0; i < s.Length; i++)
            freq[s[i]]++;
    }
    
    public static void Main()
    {
        string s = "thisisit!";
        int[] freq = new int[MAX_CHARS];
        
        CalculateFrequency(s, freq);
        
        // সর্বাধিক ফ্রিকোয়েন্সি খুঁজুন
        int maxFreq = 0;
        char maxChar = '\0';
        
        for (int i = 0; i < MAX_CHARS; i++)
        {
            if (freq[i] > maxFreq)
            {
                maxFreq = freq[i];
                maxChar = (char)i;
            }
        }
        
        Console.WriteLine($"স্ট্রিং: \"{s}\"");
        Console.WriteLine($"সর্বাধিক ফ্রিকোয়েন্সি: '{maxChar}' ({maxFreq} বার)");
        
        // সব ফ্রিকোয়েন্সি দেখান
        Console.WriteLine("\nসব ক্যারেক্টার ফ্রিকোয়েন্সি:");
        for (int i = 0; i < MAX_CHARS; i++)
        {
            if (freq[i] > 0)
                Console.WriteLine($"'{((char)i)}': {freq[i]}");
        }
    }
}

আউটপুট


স্ট্রিং: "thisisit!"
সর্বাধিক ফ্রিকোয়েন্সি: 'i' (3 বার)

সব ক্যারেক্টার ফ্রিকোয়েন্সি:
't': 2
'h': 1
'i': 3
's': 2
'!': 1

LINQ ব্যবহার করে সংক্ষিপ্ত সমাধান


using System.Linq;

string s = "thisisit!";

var mostFrequent = s.GroupBy(c => c)
                    .OrderByDescending(g => g.Count())
                    .First();

Console.WriteLine($"সর্বাধিক: '{mostFrequent.Key}' ({mostFrequent.Count()} বার)");

// সব ফ্রিকোয়েন্সি
var allFreq = s.GroupBy(c => c)
               .Select(g => new { Char = g.Key, Count = g.Count() })
               .OrderByDescending(x => x.Count);

foreach (var x in allFreq)
    Console.WriteLine($"'{x.Char}': {x.Count}");

ইউনিকোড সাপোর্ট (Dictionary)


using System.Collections.Generic;

string s = "হ্যালো ওয়ার্ল্ড! 🌍";
var freq = new Dictionary<char, int>();

foreach (char c in s)
{
    if (freq.ContainsKey(c)) freq[c]++;
    else freq[c] = 1;
}

var max = freq.OrderByDescending(kvp => kvp.Value).First();
Console.WriteLine($"সর্বাধিক: '{max.Key}' ({max.Value} বার)");

এজ কেস হ্যান্ডলিং


public static (char Char, int Count) GetMostFrequentChar(string input)
{
    if (string.IsNullOrEmpty(input))
        throw new ArgumentException("ইনপুট স্ট্রিং খালি");
    
    var freq = new Dictionary<char, int>();
    foreach (char c in input)
    {
        freq[c] = freq.GetValueOrDefault(c) + 1;
    }
    
    // টাই ব্রেক: প্রথমে আসা ক্যারেক্টার বেছে নিন
    return freq.Aggregate((max, current) => 
        current.Value > max.Value ? current : max);
}

পারফরম্যান্স তুলনা

পদ্ধতিটাইমস্পেসব্যবহার
int[256] অ্যারেO(n) - দ্রুততমO(1)ASCII only
Dictionary<char,int>O(n)O(k)ইউনিকোড, সাধারণ
LINQ GroupByO(n log k)O(k)পঠনীয়, প্রোটোটাইপিং

সারসংক্ষেপ

  • ASCII only, পারফরম্যান্স Криটিক্যাল: `int[256]` অ্যারে
  • সাধারণ ব্যবহার (ইউনিকোড): `Dictionary`
  • সংক্ষিপ্ত কোড: LINQ `GroupBy` + `OrderByDescending` + `First`
  • টাই ব্রেকিং: `Aggregate` বা কাস্টম লজিক ব্যবহার করুন
  1. লুকানো অ্যারেতে সবচেয়ে বেশি ফ্রিকোয়েন্ট এলিমেন্টের ইনডেক্স বের করা

  2. সিরিজে সবচেয়ে বেশি বার আবার্তিত উপাদান (most repeated element) বের করার পাইথন প্রোগ্রাম লিখুন

  3. পাইথনে লিস্টে সবচেয়ে বেশি ফ্রিকোয়েন্ট এলিমেন্ট বের করা (Find most frequent element)

  4. পাইথন প্রোগ্রাম অ্যারেতে সবচেয়ে বড় এলিমেন্ট বের করা