列表

详情


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

描述

实现删除字符串中出现次数最少的字符,若出现次数最少的字符有多个,则把出现次数最少的字符都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。

数据范围:输入的字符串长度满足 ,保证输入的字符串中仅出现小写字母

输入描述

字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。

输出描述

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

示例1

输入:

aabcddd

输出:

aaddd

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 1ms, 内存消耗: 304KB, 提交时间: 2021-09-08

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

int main()
{
    char str[21];
    while(scanf("%s",&str) != EOF){
        int min = 20;
        int num[128] = {0};
        for(int i=0; i<strlen(str); i++){
            num[str[i]]++;
        }
        for(int i=0; i<128; i++){
            if(num[i] != 0 && num[i] < min){
                min = num[i];
            }
        }
        for(int i=0; i<strlen(str); i++){
            if(num[str[i]] != min){
                printf("%c",str[i]);
            }
        }
        printf("\n");
        
    }
    return 0;
}

C 解法, 执行用时: 1ms, 内存消耗: 320KB, 提交时间: 2021-08-22

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

int main()
{
    char a[1000];
    while (~scanf("%s\n", a))
    {
        int b[1000] = {0};
        int min = 20;
        for (int i = 0; i < strlen(a); i++)
        {
            b[a[i] - 'a']++;
        }
        for (int i = 0; i < 1000; i++)
        {
            if (b[i] != 0 && b[i] < min)
            {
                min = b[i];
            }
        }
        for (int i = 0; i < strlen(a); i++)
        {
            if(b[a[i] - 'a'] > min)
            {
                printf("%c", a[i]);
            }
        }
        printf("\n");
    }
    return 0;
}

上一题