题解 | #删除字符串中出现次数最少的字符#
删除字符串中出现次数最少的字符
http://www.nowcoder.com/practice/05182d328eb848dda7fdd5e029a56da9
思路
- 创建哈希表用于存储相同字符及其个数
- 得到输入字符串
- 统计各个字符个数
- 将含有元素的数组重新赋值
- 将字符个数在hash表中排序,找最小的字符
- 找是否有和最小字符相同的字符
- 记住和最小相同的字符,到时候不打印
- 打印数量最多的字符
Answer
#include<stdio.h>
#include<string.h>
struct{
int index;//字符个数
char ch;//对应字符
}data[500],buf;
int main()
{
//得到输入字符串
char str[500];
char val[500]={0};
char num[500] = {0};
int j=0;
scanf("%s",str);
for(int i=0; i<strlen(str); i++){
//统计各个字符个数
val[(int)str[i]] += 1;
}
for(int i=(int)'a'; i<500; i++){
//统计各个字符个数
if(val[i] != 0){
data[j].index = val[i];//将含有元素的数组重新赋值
data[j].ch = i;//
j++;//不等于0字符种类//要排序的个数
}
}
//将字符个数排序,找最小的字符
for(int i=0; i<j; i++){
for(int k=i+1; k<j; k++){
if(data[i].index > data[k].index){
buf = data[i];
data[i] = data[k];
data[k] = buf;
}
}
}
//找是否有和最小字符相同的字符
num[0] = data[0].ch;
for(int k=1; k<j; k++){
if(data[0].index == data[k].index){
num[k] = data[k].ch;//记住和最小相同的字符,到时候不打印
}
}
//打印数量最多的字符
for(int i=0; i<strlen(str); i++){
int flg=0;
for(int h=0; h<j; h++){
if(str[i] == num[h]){
flg = 1;
break;
}
}
if(flg == 0){
printf("%c",str[i]);
}
}
printf("\n");
return 0;
}