题解 | #删除字符串中出现次数最少的字符#

删除字符串中出现次数最少的字符

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")

全部评论

相关推荐

千千倩倩:简历问题有点多,加v细聊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务