day 05

文章描述了一个C语言程序,该程序接受一个字符串,遍历并统计每个字符的出现次数,然后删除出现次数最少的字符,最后输出处理后的字符串。程序通过映射ASCII码到辅助数组来计算次数,并两次遍历数组来完成删除操作。时间复杂度为O(n)。
摘要由CSDN通过智能技术生成

题目描述

接受一个只包含小写字母的字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)

题目来源

题目来源

描述

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

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

输入描述:

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

输出描述:

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

示例1

输入:aabcddd
输出:aaddd

思路

对输入字符串进行遍历,将其对应的ASCII码数值映射到另一个数组中(不要忘记初始化),根据字符串中某个字符出现的次数,在另一个数组中进行累加,然后对另一个数组进行遍历,找到大于0的最小值,将另一个数组中最小值的位置全置为零,再对储存字符串的原数组遍历,找到ASCII码大于0的字符,将其输出,即为所得。

具体实现

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    char a[21];
    int min = 22;
    gets(a);
    int b[200];
    for (int c = 0; c < 200; c++)
    {
        b[c] = 0;//数组初始化
    }
    int temp;
    int len = strlen(a);
    for (int i = 0; i < len; i++)
    {
        temp = a[i];
        b[temp]++;//映射到b数组,字符串中的某个字符的出现次数
    }
    for (int k = 97; k < 123; k++)
    {
        if (b[k] < min && b[k]>0)
            min = b[k];//统计出现次数中的最少值

    }
    for (int k = 97; k < 123; k++)
    {
        if (b[k] == min)
            b[k] = 0;
    }
    for (int i = 0; i < len; i++)
    {
        int m = a[i];
        if (b[m] != 0)
        {
            printf("%c", a[i]);
        }
    

    }


    return 0;
}

时间复杂度

O(n)

小结

一直暴力解,希望以后学点新的解法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值