#include <iostream> using namespace std; #include<string> #include<map> int main() { string str; map<char, int> mp; getline(cin, str); for (int i = 0; i < str.size(); i++) { if (mp.count(str[i] == 0)) { mp.insert(pair<char, int>(str[i], 1)); } else { mp[str[i]]++; } } int min = mp.begin()->second; char minCh = mp.begin()->first; int lastMin = 0; char lastMinCh; bool flag = true; int j = 0; while (flag) { for (map<char, int>::iterator it = mp.begin(); it != mp.end(); it++) { if (j == 0) { if (it->second < min) { min = it->second; minCh = it->first; } } else { if (it->first != lastMinCh && it->second == lastMin) { minCh = it->first; } else if(it->first == lastMinCh){ it->second++; } } } if (lastMinCh == minCh && j >= 1) { flag = false; } if (flag) { for (int i = 0; i < str.size() ; i++) { if (str[i] == minCh) { str[i] = ' '; } } lastMin = min; lastMinCh = minCh; j++; } } for (int i = 0; i < str.size() ; i++) { if (str[i] != ' ') { cout << str[i]; } } }
用了map来存,对于检查过的字符,将其map中的计数加一以避免下次检查的时候重复检查导致死循环