题目
描述:
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
题目类别: 字符串
难度: 中级
运行时间限制: 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;
}