इस समस्या में, हमें लोअरकेस वर्णों की एक इनपुट स्ट्रिंग दी जाती है। हमारा काम 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