/*
题目 --华为
描述:
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
题目类别: 字符串
难度: 中级
运行时间限制: 10Sec
内存限制: 128MByte
阶段: 入职前练习
输入:
字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。
输出:
删除字符串中出现次数最少的字符后的字符串。
样例输入:
abcdd
样例输出:
dd
题目 --华为
描述:
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
题目类别: 字符串
难度: 中级
运行时间限制: 10Sec
内存限制: 128MByte
阶段: 入职前练习
输入:
字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。
输出:
删除字符串中出现次数最少的字符后的字符串。
样例输入:
abcdd
样例输出:
dd
*/
void delete_str(char* str){
//思路:传过来的是一个字符串常量,无法进行删除,因此需要拷贝出来存到数组里面进行删除,然后重新组合新字符串去覆盖原来的指针。
int len_str=strlen(str);
char* s=(char*)malloc(len_str*sizeof(char));
char ch[26]="";
//计算每个字符的数量
for(int i=0;i<len_str;i++)
++ch[*(str+i)-'a'];
//判断出字符个数最少的多少--min个
int min=len_str;
for(int i=0;i<26;i++)
if(ch[i]<min && ch[i]>0){
min=ch[i];
}
//在输入字符串中,把字符个数不是min的提取出来
int j=0;
for(int i=0;i<len_str;i++)
if(ch[*(str+i)-'a']!=min){
s[j]= *(str+i);
j++;
}
s[j]='\0';//给新字符串添加结束符号
cout<<s<<endl;
free(s);
}