本题有几个关键点,一是如何统计各个字符串出现的次数,二是如何剔除次数最少的字符。可以使用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;
}