字符频度
题目描述
一个只含小写英文字母的字符串,各个字符出现的次数为Ca,Cb,…,Cz。求Ci中出现次数最多的数及其字符。比如字符串“abcdd”
,‘a’
,‘b’
,‘c’
都出现1次,‘d’
出现2次,所以1出现次数最多。 如果存在多个相同的最多出现次数,输出字母小的那个次数。比如字符串“aaabbccddd”
,3个‘a’
,2个‘b’
,2个‘c’
,3个‘d’
,3和2都出现2次,这时因为‘a’
最小,输出”3 a d”。
输入
存在不超过1000组样例,每个样例为一个字符串,长度不超过1000。
输出
每个样例输出一行,首先是一个整数,表示最多出现的次数,然后按字典序输出各个字母,每个字母之间用一个空格隔开,行尾无多余空格。
样例输入
abcdd ababab
样例输出
1 a b c 3 a b
Source Code
Problem: 1395 User: 202205567311
Memory: 1208K Time: 61MS
Language: GCC Result: Accepted
Source Code
#include <stdio.h>
#include <string.h>
int main()
{
char input[1010] = {'\0'};
while (scanf("%s", input) != EOF)
{
getchar();
int len = strlen(input);
int io[27] = {0};
for (int i = 0; i < len; i++)
{
for (int j = 0; j < 26; j++)
{
if (input[i] == 'a' + j)
{
io[j]++;
break;
}
}
}
int onetwo[1005] = {0};
for (int i = 0; i < 26; i++)
{
for (int j = 1; j <= 1000; j++)
{
if (io[i] == j)
{
onetwo[j]++;
}
}
}
int flag[1100] = {0};
int countflag = 0;
int max = 1, breakio = 0;
for (int i = 1; i <= 1000; i++)
{
if (onetwo[i] > max)
{
max = onetwo[i];
}
}
for (int i = 1; i <= 1000; i++)
{
if (onetwo[i] == max)
{
flag[countflag] = i;
countflag++;
}
}
for (int i = 0; i < 26; i++)
{
for (int j = 0; j <= 1000; j++)
{
if ((io[i] == flag[j])&&(io[i]!=0))
{
int inflag = flag[j];
printf("%d", inflag);
for (int k = 0; k < 26; k++)
{
if (io[k] == inflag)
{
printf(" %c", 'a' + k);
}
}
breakio = 1;
break;
}
}
if (breakio == 1)
{
break;
}
}
printf("\n");
}
}