且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

[华为上机练习题]7.删除字符串中出现次数最少的字符

更新时间:2022-03-15 00:31:35

题目

描述:
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。

题目类别: 字符串
难度: 中级
运行时间限制: 10Sec
内存限制: 128MByte
阶段: 入职前练习
输入:
字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。

输出:
删除字符串中出现次数最少的字符后的字符串。

样例输入:
abcdd

样例输出:
dd

代码

/*---------------------------------------
*   日期:2015-06-29
*   作者:SJF0115
*   时间:2014
*   题目:删除字符串中出现次数最少的字符
*   来源:华为上机
-----------------------------------------*/
#include <iostream>
#include <climits>
#include <string>
using namespace std;
// 不考虑非法输入
string DeleteMinChar(string str){
    string result = "";
    int size = str.size();
    if(size == 0){
        return result;
    }//if
    // 统计个数
    int hash[256] = {0};
    for(int i = 0;i < size;++i){
        ++hash[str[i]];
    }//for
    // 最小出现次数
    int Min = INT_MAX;
    for(int i = 0;i < size;++i){
        if(Min > hash[str[i]]){
            Min = hash[str[i]];
        }//if
    }//for
    // 删除最小出现次数
    for(int i = 0;i < size;++i){
        if(Min != hash[str[i]]){
            result += str[i];
        }//if
    }
    return result;
}

int main(){
    string str;
    //freopen("C:\\Users\\Administrator\\Desktop\\c++.txt","r",stdin);
    while(cin>>str){
        cout<<DeleteMinChar(str)<<endl;
    }//while
    return 0;
}