题解 | #删除字符串中出现次数最少的字符#
删除字符串中出现次数最少的字符
https://www.nowcoder.com/practice/05182d328eb848dda7fdd5e029a56da9
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int findByKey(vector<pair<char, int>> v, char ch) {
if (v.empty()) {
return -1;
}
for (int j = 0; j < v.size(); j++) {
if (v[j].first == ch) {
return j;
}
}
return -1;
}
int main() {
string input;
while (cin >> input) { // 注意 while 处理多个 case
//使用pair<char, int>数组记录input中字符出现的次数
vector<pair<char, int>> v;
for (auto i : input) {
int j = findByKey(v, i);
if (j == -1) {
v.push_back(make_pair(i, 1));
} else {
v[j].second++;
}
}
//找出pair<char, int>数组中最小的value,将对应的key保存在repetition字符数组中
vector<char> repetition;
int min = 20;
for (auto& k : v) {
if (k.second < min) {
min = k.second;
}
}
for (auto& k : v) {
if (k.second == min) {
repetition.push_back(k.first);
}
}
//遍历,删除input中重复字符
for (auto& k : repetition) {
for (int i = 0; i < input.size(); i++) {
if (input[i] == k) {
string before, after;
before = input.substr(0, i);
if (i != input.size() - 1) {
after = input.substr(i + 1);
}
input = before + after;
}
}
}
cout << input << endl;
}
}
// 64 位输出请用 printf("%lld")
查看13道真题和解析
嘉士伯公司氛围 308人发布