ในปัญหานี้ เราได้รับสตริงอินพุตของอักขระตัวพิมพ์เล็ก งานของเราคือ 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