B4262 [GESP202503 三级] 词频统计
题目描述
在文本处理中,统计单词出现的频率是一个常见的任务。现在,给定
n
n
n 个单词,你需要找出其中出现次数最多的单词。在本题中,忽略单词中字母的大小写(即 Apple
、apple
、APPLE
、aPPle
等均视为同一个单词)。
请你编写一个程序,输入 n n n 个单词,输出其中出现次数最多的单词。
输入格式
第一行,一个整数 n n n,表示单词的个数;
接下来 n n n 行,每行包含一个单词,单词由大小写英文字母组成。
输入保证,出现次数最多的单词只会有一个。
输出格式
输出一行,包含出现次数最多的单词(输出单词为小写形式)。
输入输出样例 #1
输入 #1
6
Apple
banana
apple
Orange
banana
apple
输出 #1
apple
说明/提示
对于所有测试点, 1 ≤ n ≤ 100 1\leq n\leq 100 1≤n≤100,每个单词的长度不超过 30 30 30,且仅由大小写字母组成。
解析
可以先把这些单词都变成小写,然后排序,统计每个单词出现的次数,然后找出出现次数最多的单词,详见代码:
#include <bits/stdc++.h>
using namespace std;
string s[105];
int n;
int mx = 0;//出现最多的次数
string ans;//答案
int main() {
cin >> n;
for(int i = 1; i <= n; i++) {//循环输入
cin >> s[i];
//遍历每个字母,大写改成小写
for(int j = 0; j < s[i].size(); j++) {
if (isupper(s[i][j])) {
s[i][j] += 'a' - 'A';
}
}
}
sort(s + 1, s + n + 1);//排序
int cnt = 1;//当前单词出现的次数
ans=s[1];
for(int i = 2; i <= n; i++) {
if (s[i] == s[i - 1]) {//如果当前单词跟前一个单词相同,则数量加一
cnt++;
} else {//不同,则当前单词目前只有一个
cnt = 1;
}
if (cnt > mx) {//如果当前单词出现的次数超过最大值
mx = cnt;//刷新最大值
ans = s[i];//记录单词
}
}
cout << ans;
return 0;
}