题目要求判断给定字符串中出现次数最多的字符。
总时间限制: 1000ms 内存限制: 65536kB
判断一个由a-z这26个字符组成的字符串中哪个字符出现的次数最多
第1行是测试数据的组数n,每组测试数据占1行,是一个由a-z这26个字符组成的字符串
每组测试数据之间有一个空行,每行数据不超过1000个字符且非空
n行,每行输出对应一个输入。一行输出包括出现次数最多的字符和该字符出现的次数,中间是一个空格。
如果有多个字符出现的次数相同且最多,那么输出ascii码最小的那一个字符
2
abbccc
adfadffasdf
c 3
f 4
可以采用箱子计数的方法,制作26个箱子,初始化为0,遍历字符来累加每个箱子的值,最后比较大小输出第一个最大值即可。
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main() {
int n, i, j, ch[26], max, maxc;
string str;
cin >> n;
for (i = 0; i < n; ++i) {
cin >> str;
memset(ch, 0, sizeof(int) * 26);
for (j = 0; j < str.length(); ++j) {
ch[str[j] - 'a']++;
}
max = -1;
for (j = 0; j < 26; ++j) {
if (max < ch[j]) {
max = ch[j];
maxc = j;
}
}
cout << char('a' + maxc) << " " << max << endl;
}
return 0;
}
2742.cpp 代码长度:459B 内存:152kB 时间:8ms 通过率:93% 最小内存:152kB 最短时间:0ms
初始化数组要全部赋值为0,找到第一个最大值的方法是在比较大小时仅采用小于号而不是小于等于即可,最后还要输出该字符及其个数。
有任何的改进意见欢迎大家在微信平台公众号主页面留言或者发表issue。