目录
一、 哈希表
二、 编写解题
2.1 统计出现次数
2.2 解答
通过本次练习,将学习到C++中哈希表的基础知识
题目:
给定一个只包含小写字母的字符串,统计字符串中每个字母出现的频率,并找出出现频率最高的字母,如果最高频率的字母有多个,输出字典序靠前的那个字母。
一、 哈希表
哈希表的作用是快速判断一个元素是否出现在集合里,它的核心思想是在关键码和存储位置之间建立一个确定的对应关系f
, 使得每个关键字key
对应一个存储位置,而这个对应关系,称之为散列函数(哈希函数)。
哈希表来解决问题的时候,一般选择以下三种数据结构。
- 数组
set
集合map
映射
二、 编写解题
由于输入的全都是小写字母,小写字母只有26个,那我们定义一个长度为26的数组即可,字符a到字符z的ASCII是26个连续的数值,所以字符a映射为下标0,相应的字符z映射为下标25。
2.1 统计出现次数
统计字符大小出现的次数,并进行计数。
for(int i = 0; i < s.size(); i++){
count[ s[i] - 'a' ]++;
}
2.2 解答
#include <iostream>
#include <string>
using namespace std;
int main(){
int n;
string s;
while(cin >> n){
while(n--){
cin >> s;
//创建一个26位的count数组,并将其全部初始化为0,用于储存后续字符出现频率
int count[26] = {0};
//统计各个字符出现的频率,并将其储存在count数组中
for(int i = 0; i < s.size(); i++){
count[ s[i] - 'a']++;
}
//初始化最大值
int flag = 0;
//定义出现频率最多的字符为result
char result;
//遍历整个数组,找到值最大的索引,并找出出现频率最大的字符
for(int i = 0; i < 26; i++){
if(count[i] > flag){
flag = count[i];
result = i + 'a';
}
}
cout << result << endl;
}
}
}