本题有几个关键点,一是如何统计各个字符串出现的次数,二是如何剔除次数最少的字符。可以使用unordered_map来统计字符串中各个字符出现的次数;然后由于unordered_map是无序的,因此将其转换为vector后根据值来排序,从而获取到出现的最小次数的值。记录这个值,遍历字符串,将出现次数大于最小次数的字符记录下来。
#include <iostream>
#include<unordered_map>
#include<vector>
#include<algorithm>
using namespace std;
bool cmp (const pair<char, int> &p1, const pair<char, int> &p2) {
return p1.second < p2.second;
}
int main() {
string s;
getline(cin, s, '\n');
unordered_map<char, int> str;
for(int i = 0; i < s.size(); i++) {
if (str.find(s[i]) != str.end()) {
// 表示该字符已经存在了
str[s[i]]++;
} else {
str[s[i]] = 1;
}
}
vector<pair<char, int>> vec_sort;
for (unordered_map<char,int>::iterator iter = str.begin(); iter != str.end(); iter++) {
vec_sort.push_back(make_pair(iter->first, iter->second));
}
sort(vec_sort.begin(), vec_sort.end(), cmp);
int minNum = vec_sort[0].second;
string res;
for (int i = 0; i < s.size(); i++) {
if (str[s[i]] == minNum) {
continue;
} else {
res.push_back(s[i]);
}
}
cout << res << endl;
return 0;
}