স্ট্রিংয়ে ক্যারেক্টার ফ্রিকোয়েন্সি খুঁজে বের করা
স্ট্রিংয়ের প্রতিটি ক্যারেক্টার কতবার এসেছে তা গণনা করে সর্বোচ্চ ফ্রিকোয়েন্সিostics वाले ক্যারেক্টারটি বের করা হয়। ASCII ক্যারেক্টার সেট (২৫৬) ধরে ফрикোয়েন্সি অ্যারে ব্যবহার করা হয়।
অ্যালগরিদম
- ফрикোয়েন্সি অ্যারে
freq[256]শূন্য দিয়ে ইনিশিয়ালাইজ করুন। - স্ট্রিং ট্রাভার্স করে প্রতিটি ক্যারেক্টার এর ASCII ভ্যালুকে ইন্ডেক্স হিসেবে ব্যবহার করে ফ্রিকোয়েন্সি বাড়ান।
- সবচেয়ে বেশি ফ্রিকোয়েন্সিostics वाले ক্যারেক্টারটি খুঁজে বের করুন।
সি প্রোগ্রাম
#include <stdio.h>
#include <string.h>
#define MAX_CHARS 256
#define MAX_STR 100
int main() {
char str[MAX_STR];
int freq[MAX_CHARS] = {0};
int i, max_char = 0;
printf("Enter a string: ");
fgets(str, sizeof(str), stdin);
str[strcspn(str, "\n")] = '\0'; // newline হ্রাস
// ফ্রিকোয়েন্সি কাউন্ট
for (i = 0; str[i] != '\0'; i++) {
unsigned char ch = (unsigned char)str[i];
freq[ch]++;
}
// সর্বোচ্চ ফ্রিকোয়েন্সিostics वाले ক্যারেক্টার
for (i = 1; i < MAX_CHARS; i++) {
if (freq[i] > freq[max_char])
max_char = i;
}
if (freq[max_char] > 0)
printf("Max occurring character: '%c' = %d times\n", max_char, freq[max_char]);
else
printf("Empty string\n");
return 0;
}
আউটপুট
Enter a string: tutorials point Max occurring character: 't' = 3 times
বিভিন্ন ক্যারেক্টার টাইপ হ্যান্ডলিং
unsigned charকাস্ট ব্যবহার করুন যাতে নেগেটিভ ASCII ভ্যালু (signed char-এ) সঠিকভাবে হ্যান্ডল হয়।- এক্সটেন্ডেড ASCII / UTF-8 মাল্টি-বাইট ক্যারেক্টার এই মেথডে সঠিক কাজ করবে না।
সম্পূর্ণ ফ্রিকোয়েন্সি টেবিল প্রিন্ট (অপশনাল)
printf("\nFull frequency table:\n");
for (i = 0; i < MAX_CHARS; i++) {
if (freq[i] > 0) {
if (i >= 32 && i <= 126) // printable
printf("'%c' = %d\n", i, freq[i]);
else
printf("ASCII %d = %d\n", i, freq[i]);
}
}
টাইম ও স্পেস কমপ্লেক্সিটি
- টাইম: O(n + 256) ≈ O(n)
- স্পেস: O(256) = O(1) কনস্ট্যান্ট