题解 | #删除字符串中出现次数最少的字符#
删除字符串中出现次数最少的字符
https://www.nowcoder.com/practice/05182d328eb848dda7fdd5e029a56da9
#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中的计数加一以避免下次检查的时候重复检查导致死循环
华为机试刷题记录 文章被收录于专栏
记录一下手打代码的解题思路方便复习
查看3道真题和解析