小栈的字母统计
描述
小栈是一名翻译,每天都要看许多令人头疼的英文。他无聊时会想-些很奇怪的问题,例如英文单词是如何组成的,它们有什么来源等等。有一天他突然想,到底哪个英文字母在英文单词中出现的频率最高呢?他发现解决这个问题的工作量还是很大的,于是找到了你帮助他解决这个问题。他会提供你一个仅由26个小写字母(a-z)组成的字符串s(中间不含空格),请你计算一下这字符串s中哪个字母出现的次数最多,如果说出现次数最多的字母不止一个,那么请把它们都打印出来,按照字母表的顺序输出(abcdef...xyz),也就是按照这些字母的ASCII由小到大输出出来。每组数据都只有一行,就是题目中所描述的字符串s,它的长度不会超过200。你也只需输出一行,即出现次数最多的字母。(如果很多,就按字母表序输出)
输入
一行,即字符串s
输出
一行,即出现次数最多的字母按字母表顺序组成的字符串
输入样例 1
abaca
输出样例 1
a
输入样例 2
msmcatac
输出样例 2
acm
思路:用一个数组记录每个字母出现的次数,然后对字符数组去重复,输出出现次数最多的字母。
#include<bits/stdc++.h>
using namespace std;
char a[205];
int b[27],c[27];
bool cmp(int a, int b)
{
return a>b;
}
int main()
{
cin.getline(a,205);
int n = strlen(a);
for(int i = 0; i < n; ++i)
{
b[a[i]-'a']++;
c[a[i]-'a']++;
}
sort(b,b+26,cmp);
int max = b[0];//找到最大出现次数
sort(a,a+n);//从小到大输出
for(int i = 0; i < n; ++i)//去重
{
if(a[i] == a[i+1])
{
for(int j = i; j < n; ++j)
{
a[j] = a[j+1];
}
n--;
i--;//防止有多个一样的字符,需要重复判断
}
}
for(int i = 0; i < n; ++i)
{
if(c[a[i]-'a'] == max)//输出最大出现次数的字母
{
cout << a[i];
}
}
return 0;
}