在我一顿猛如虎的操作后,时间从61ms降到了15ms,狠狠的win(doge)
escription | ||
字符频度题目描述一个只含小写英文字母的字符串,各个字符出现的次数为Ca,Cb,…,Cz。求Ci中出现次数最多的数及其字符。比如字符串 输入存在不超过1000组样例,每个样例为一个字符串,长度不超过1000。 输出每个样例输出一行,首先是一个整数,表示最多出现的次数,然后按字典序输出各个字母,每个字母之间用一个空格隔开,行尾无多余空格。 样例输入abcdd ababab 样例输出1 a b c 3 a b |
Source Code
Problem: 1395 User: 202205567311
Memory: 1200K Time: 15MS
Language: G++ Result: Accepted
Source Code
#include<stdio.h>
#include<string.h>
char input[1005];
char output[1005];
int alpattimes[26];
int numtimes[1005];
int maxinum,maxnumpointer;
void turnf(int len){
for(int i=0;i<len;i++){
alpattimes[input[i]-'a']++;
}
}
void tomax(void){
for(int i=0;i<=26;i++){
if(alpattimes[i]==0){
continue;
}
numtimes[alpattimes[i]]++;
maxinum=(numtimes[alpattimes[i]]>maxinum)?numtimes[alpattimes[i]]:maxinum;
}
}
void printoutput(int len){
for(int i=0;i<len-1;i++){
printf("%c ",output[i]);
}
printf("%c\n",output[len-1]);
}
int main(){
while(scanf("%s",input)!=EOF){
char *p=output;
maxinum=0;
maxnumpointer=-1;
memset(alpattimes,0,sizeof alpattimes);
memset(numtimes,0,sizeof numtimes);
turnf(strlen(input));
tomax();
for(int i=0;i<=25;i++){
if(numtimes[alpattimes[i]]==maxinum){
maxnumpointer=alpattimes[i];
break;
}
}
printf("%d ",maxnumpointer);
for(int i=0;i<=25;i++){
if(alpattimes[i]==maxnumpointer){
*p=i+'a';
p++;
}
}
*p='\0';
printoutput(strlen(output));
}
}