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