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

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

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

思路

  1. 创建哈希表用于存储相同字符及其个数
  2. 得到输入字符串
  3. 统计各个字符个数
  4. 将含有元素的数组重新赋值
  5. 将字符个数在hash表中排序,找最小的字符
  6. 找是否有和最小字符相同的字符
  7. 记住和最小相同的字符,到时候不打印
  8. 打印数量最多的字符

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;
}
全部评论

相关推荐

蚂蚁 基架java (n+6)*16 签字费若干
点赞 评论 收藏
分享
totoroyyw:千年老妖😂
投递华为等公司10个岗位
点赞 评论 收藏
分享
勇敢的联想人前程似锦:如果我是你,身体素质好我会去参军,然后走士兵计划考研211只需要200多分。
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务