题解 | #字符统计#
字符统计
https://www.nowcoder.com/practice/c1f9561de1e240099bdb904765da9ad0
#include <stdio.h> int main() { int hash[10+26]={}; int count=0; char c; while(scanf("%c",&c)&&c!='\n'){ if(c>='a'&&c<='z'){ hash[c-'a'+10]++; if(hash[c-'a'+10]==1) count++; } else { hash[c-'0']++; if(hash[c-'0']==1) count++; } } for(int i=0;i<count;i++){ int max=0; int loc=-1; for(int j=0;j<36;j++){ if(hash[j]>max){ max=hash[j]; loc=j; } } if(loc<10) printf("%c",(char)(loc+'0')); else printf("%c",(char)(loc+'a'-10)); hash[loc]=0; } printf("\n"); //printf("%c",'0'>'a'?'0':'a'); return 0; }
测试可知ASCII中数字在小写字母之前,直接使用hash
对每一个字符,统计其输入个数,映射到hash表中
对完成统计的hash表进行遍历(遍历的轮次取决于不重复的字符个数)
每次找到其中次数最多的那个,将对应坐标转换成字符并输出,同时将其中的统计值变为0(防止多次统计输出)
轮次结束则输出完成。