题解 | #删除字符串中出现次数最少的字符#

删除字符串中出现次数最少的字符

https://www.nowcoder.com/practice/05182d328eb848dda7fdd5e029a56da9

#include <stdio.h>
#include <stdint.h>
#include <string.h>

//11.52-12.28 半小时,主要在调试
int main() {
    char str[21] = {0};
    scanf("%s", str);
    
    uint8_t count[26] = {0};
    memset(count, 0, sizeof(count));

    //记录各个字符出现的次数
    int len = strlen(str);
    int i;
    for (i = 0; i < len; i++) {
        count[str[i] - 'a']++;
        //printf("str[i]:%c\n", str[i]);
    }

    //获取最小出现的次数
    uint8_t min = count[str[0] - 'a'];
    //printf("min:%d\n", min);
    for (i = 0; i < sizeof(count); i++) {
        if (count[i] < min && count[i] != 0) {
            min = count[i];
        }
    }
    //printf("min:%u, count[0]:%u\n", min,count[0]);
    
    //判断是否存在多个最小出现的字母
    char min_char_num = 0;
    char min_char_arr[20] = {0};
    for (i = 0; i < sizeof(count); i++) {
        if (count[i] == min) {
            //printf("%c ", i + 'a');
            min_char_arr[min_char_num++] = i + 'a';
            
        }
    }

    char output[21] = {0};
    int j = 0;
    for (i = 0; i < len; i++) {
        char skip = 0;
        for (int k =0; k < min_char_num; k++) {
            if (str[i] == min_char_arr[k]) {
                skip = 1;
                break;
            }
        }
        if (skip) {
            continue;
        }
        output[j++] = str[i];
    }

    printf("%s", output);
    return 0;
}

反思:

①一开始没注意到是最大还是最小,搞错了

②最小值用了 count[0],没出现也是最小啊,应用 count[str[0]-'a']才对

③固定思维,做过了最大值的,最小值的有变化,不会变通。。。

全部评论

相关推荐

拒绝无效加班的小师弟很中意你:求职意向没有,年龄、课程冗余信息可以删掉,需要提升项目经历。排版需要修改。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务