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

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

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

#include <stdio.h>
#include <string.h>
//利用好strchr()
//利用strchr()统计每个字符出现的次数,返回一张按照字符顺序的出现次数数组,找到数组中最小的数,并找到对应的位置的字符,不输出该字符
void findtimes(int *times,char *p)
{
    //char character[20];
    //int times[26];
    
    //for(int i=0;i<strlen(p);i++)
    for(int i=0;i<26;i++)
    {
        
        //寻找26个字母,统计出现次数,返回一个times[26]
        char zimu = 97+i;
        char *str=p;
        if(strchr(str,zimu)==0)
        {
            times[i]=0;
        }
        else
        {
            int timenum=0;
            while ((str=strchr(str, zimu)) != 0)
            {
                timenum++;
                str++;
            } 
            times[i]=timenum;
        }
        
    }
}
int IsMore(int *tmp,int n,int num)
{
    for(;n<=num;n++)
    {
        if(*(tmp+n)!=0) return 1;
    }
    return 0;
    
}
    //return times;

int main()
{
    char str[20];
    int length=0;
    scanf("%s",str);
    length=strlen(str);
    char *p=str;
    int times[26];
    findtimes(times,p);//获取到26个字母对应的出现次数
    int tmp[20][20];
    int num=1;
    for(;num<length;num++)
    {
       
        
        int a=0;
        for(int i=0;i<26;i++)
        {
            if(times[i]==num) 
            {
                tmp[num][a]=i+97;
                a++;
            }
        }
        tmp[num][a]=0;
    }
    for(int i=1;i<num;i++)
    {
        if(tmp[i][0]!=0)
        {
            tmp[0][i]=1;
            continue;
        }
        tmp[0][i]=0;
        
    }
    char notprint[20]={'\0'};
    for(int i=1;i<num;i++)
    {
        if(IsMore(tmp,i+1,num)) 
        {
            for(int j=0;tmp[i][j]!=0;j++)
            *(notprint+j)=tmp[i][j];
        }
        //printf("%s",notprint);
        if(*notprint!=NULL)
        break;
    }
    
    //printf("%c %d\n",97+i,times[i]);

    for(int i=0;i<length;i++)
    {
        int k=0;
        int check=0;
        while(*(notprint+k)!=NULL)
        {
            if(*(p+i)==*(notprint+k))
            {
                check=1;
                break;
            }
            k++;
            
        }
        if(check==0)
        {
            printf("%c",*(p+i));
        }
        
    }


    return 0;
}

全部评论

相关推荐

11-08 13:58
门头沟学院 Java
程序员小白条:竟然是蓝桥杯人才doge,还要花钱申领的offer,这么好的公司哪里去找
点赞 评论 收藏
分享
拒绝无效加班的小师弟很中意你:求职意向没有,年龄、课程冗余信息可以删掉,需要提升项目经历。排版需要修改。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务