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

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

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

  1. 首先,采用unordered_map来存储这样一个统计信息,其中key为字符,value为该字符出现的序列。
  2. 第二部,先是一个循环,每次迭代寻找次数为MinTimes的字符并将原串中置换为空格,没有最小次数为MinTimes的字符,则MinTimes加1往下循环。当当前次数的所有字符都替换为空格后,再统一将其删除,这样就得到了最终的字符串了。
#include<iostream>
#include<unordered_map>
#include<vector>
using namespace std;

int main()
{
    string s;
    while ( cin >> s ){
        unordered_map<char, vector<int>> m;
        int MinTimes = 1;
        bool Del_flag = false;
        // 遍历一遍s统计数量,并记录下
        for (int i = 0; i< s.length(); i++){
            if (!m.count(s[i])){
                m[s[i]] =  {i};
            }
            else{
                m[s[i]].push_back(i);
            }
        }
        while(MinTimes <= s.length()){
            for(auto & it : m){
                if (it.second.si***Times){
                    Del_flag = true;
                    for (int i : it.second){
                        s[i]=' ';
                    }

                }
            }
            if (!Del_flag){
                MinTimes ++;
            }
            else{
                int loc;
                while((loc = s.find(' ')) != string::npos){
                    s.erase(loc, 1);
                }
                break;
            }
        }
        cout << s <<endl;
    }
    return 0;
}
全部评论

相关推荐

10-21 23:48
蚌埠坦克学院
csgq:可能没hc了 昨天一面完秒挂
点赞 评论 收藏
分享
牛舌:如果我不想去,不管对方给了多少,我一般都会说你们给得太低了。这样他们就会给下一个offer的人更高的薪资了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务