题解 | #删除字符串中出现次数最少的字符#
删除字符串中出现次数最少的字符
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;
}


查看5道真题和解析