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

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

https://www.nowcoder.com/practice/05182d328eb848dda7fdd5e029a56da9

#include <iostream>
#include <string>
#include <cctype>
#include <vector>
#include <set>
#include <algorithm>
#include <map>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
using std::set;
using std::map;
using std::sort;

void process_string(string& str) {
    // 将所有字符转换为小写
    for (auto& ch : str) {
        ch = tolower(ch);
    }

    //// 打印转换后的字符串
    //for (auto ch : str) {
    //    cout << ch << " ";
    //}
    //cout << endl;

    // 使用 set 来存储唯一字符
    set<char> uniqueChars;
    // 使用 map 来统计每个字符出现的次数
    map<char, int> charCount;

    // 遍历字符串
    for (auto it = str.begin(); it != str.end(); it++) {
        uniqueChars.insert(*it);
        charCount[*it]++;
    }

    // 创建数组来存储出现次数
    int arr[20] = { 0 };
    int i = 0;

    // 将出现次数复制到数组中
    for (auto& elem : charCount) {
        arr[i++] = elem.second;
    }

    // 对数组进行排序
    sort(arr, arr + i);

    // 输出出现次数最少的字符,并从原始字符串中删除这些字符
    /*cout << "Least frequent character(s): ";*/
    for (auto& elem : charCount) {
        if (elem.second == arr[0]) {
            /* cout << "'" << elem.first << "' ";*/
            while (true) {
                size_t pos = str.find(elem.first);
                if (pos ==
                        string::npos) { //检查返回的位置是否等于 std::string::npos 来判断是否找到了子串。
                    break;
                }
                str.erase(pos, 1);//删除str pos位置的一个字符
            }
        }
    }
    //cout << endl;

    cout << str << endl;
}

int main() {
    string str;

    getline(cin, str);

    process_string(str);

    return 0;
}

全部评论

相关推荐

双非一本失业第二年:《机器视觉垃圾分类》
点赞 评论 收藏
分享
10-15 09:13
已编辑
天津大学 soc前端设计
点赞 评论 收藏
分享
字节 飞书绩效团队 (n+2) * 15 + 1k * 12 + 1w
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务