এই সমস্যায়, আমাদের ছোট হাতের অক্ষরগুলির একটি ইনপুট স্ট্রিং দেওয়া হয়েছে। আমাদের কাজ হল m করা একটি ইনপুট স্ট্রিং-এ সর্বাধিক সংঘটিত অক্ষর .
ঘটনার একই ফ্রিকোয়েন্সি সহ একাধিক মানের ক্ষেত্রে, আমাদের অভিধানিকভাবে ছোট মান প্রিন্ট করতে হবে।
সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,
ইনপুট
string = “programming”
আউটপুট
g
সমাধান পদ্ধতি
সমস্যার সমাধান খুঁজতে, আমাদের পঠিত স্ট্রিংটি সাজাতে হবে এবং তারপর স্ট্রিংটি অতিক্রম করতে হবে যাতে আমরা স্ট্রিংটিতে সর্বাধিক উপস্থিতি রয়েছে এমন অক্ষরটি খুঁজে পেতে পারি। এই সমস্যাটি জয় করতে আমরা হ্যাশিং পদ্ধতি (হ্যাশ টেবিল পদ্ধতি) ব্যবহার করব। প্রতিটি স্বতন্ত্র অক্ষরকে অক্ষরের অ্যারেতে ট্রাভার্সিং এবং হ্যাশ করাকে হ্যাশিং বলা হয়।
সাধারণত, হ্যাশ অ্যারের আকার 256 হিসাবে বরাদ্দ করা হয়। তবে যদি স্ট্রিংটিতে শুধুমাত্র 0 থেকে 127 পর্যন্ত অক্ষর থাকে তবে আমরা 128 আকারের একটি হ্যাশ টেবিল ব্যবহার করতে পারি, যাতে আমরা স্ট্রিং অনুযায়ী হ্যাশ টেবিলের আকার ডিলকেট করতে সক্ষম হব।
অ্যালগরিদম
-
একটি ইনপুট স্ট্রিং পড়ুন৷
৷ -
স্ট্রিং-এ সর্বাধিক সংঘটিত অক্ষর গণনা করার জন্য একটি ফাংশন তৈরি করুন।
-
পৃথক অক্ষর গণনা রাখতে একটি অ্যারে তৈরি করুন এবং অ্যারেটিকে 0 হিসাবে শুরু করুন।
-
ইনপুট স্ট্রিং থেকে অক্ষর গণনা অ্যারে তৈরি করুন।
-
সর্বাধিক গণনা এবং ফলাফল শুরু করুন।
-
স্ট্রিং এর মধ্য দিয়ে অতিক্রম করুন এবং একে অপরের গণনা বজায় রাখুন।
-
অবশেষে, সর্বাধিক গণনা সহ অক্ষরটি সন্ধান করুন এবং এটি মুদ্রণ করুন৷
উদাহরণ
আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম
#include <bits/stdc++.h> using namespace std; char findMaxOccuringChar(char str[]){ int freq[26] = { 0 }; int maxFreq = -1; char maxFreqChar; int len = strlen(str); for (int i = 0; i < len; i++) freq[str[i] - 'a']++; for (int i = 0; i < 26; i++) if (maxFreq < freq[i]) { maxFreq = freq[i]; maxFreqChar = (char)(i + 'a'); } return maxFreqChar; } int main(){ char str[] = "programming"; cout<<"Maximum occurring character of input string is "<<findMaxOccuringChar(str); return 0; }
আউটপুট
Maximum occurring character of input string is g