题解 | #字符统计#

字符统计

http://www.nowcoder.com/practice/c1f9561de1e240099bdb904765da9ad0

两次排序,但没有榜2大哥代码简短

#include <stdio.h>
void sort(int* arr, int beg, int end) {//ascending bubble sort
    for (int i = beg; i < end - 1; i++)
        for (int j = beg; j + 1 < end - (i - beg); j++)
            if (arr[j] > arr[j + 1]) {
                int t = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = t;
            }
}
int main() {
    char str[1001];
    while (~scanf("%s", str)) {
        int len, ch[128], sum[128];
        for (len = 0; len < 128; len++) {
            ch[len] = len;
            sum[len] = 0;
        }
        //done:initialization
        for (len = 0; str[len]; len++)sum[str[len]]++;
        //done:statement
        for (int i = 0; i < 128 - 1; i++)
            for (int j = 0; j + 1 < 128 - i; j++)
                if (sum[j] < sum[j + 1]) {//descending bubble sort
                    int t = sum[j];
                    sum[j] = sum[j + 1];
                    sum[j + 1] = t;
                    t = ch[j];
                    ch[j] = ch[j + 1];
                    ch[j + 1] = t;
                }
        for (int i = 0; sum[i]; i++) {
            int j = i;
            while (sum[j] != sum[i])j++;
            sort(ch, i, j);
            i = j;
        }
        for (int i = 0; sum[i]; i++) {
            printf("%c", ch[i]);
        }
        printf("\n");
    }
}

附:榜2大哥代码,更简短,妙

#include <stdio.h>
#include <string.h>
 
int main()
{
    char str[1000] = {0};
    while (~scanf("%s", str)) {
        int cnt[200] = {0};
        int max = 0;
        for (int i = 0; i < strlen(str); i++) {
            cnt[str[i]]++;
            max = (max > cnt[str[i]]) ? max : cnt[str[i]];
        }
        for (int i = max; i > 0; i--) {
            //j为char
            for (char j = '0'; j < 'z'+1; j++) {
                if (cnt[j] == i) {
                    printf("%c", j);
                }
            }
        }
        printf("\n");
    }
    return 0;
}
全部评论

相关推荐

沉淀一会:**圣经 1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
11 2 评论
分享
牛客网
牛客企业服务