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

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

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

#include <iostream>
#include <string>
#include <unordered_map>

using namespace std;

class Solution
{
  public:
    void Del_Min_Char(string& str)
    {
        unordered_map<char, int> m;
        for(int i = 0; i < str.size();i++)
        {
            if(m.count(str[i]) != 1) //如果没有该元素
                m[str[i]] = 1; //则插入哈希元素,对应的值为1
            else   //如果已有该元素了
                m[str[i]] += 1;  //则自增该字符的个数
        }
        
        //遍历字符串,根据每个key 找出个数最小的
        int min_val = m[str[0]];
        int min_pos = 0;
        for(int i = 1;i < str.size();i++)
        {
            if(m[str[i]] < min_val)//先找出最小的
            {
                min_val = m[str[i]]; //找出最小的所对应的字符个数
                min_pos = i; //记录最小的所在字符串的索引
            }
        }
        //删除最小的---删除
        str.erase(min_pos, 1);
        
        //再次遍历删除后的字符串,如果遇到key对应的值等于最小值,则删除该字符即可
        for(int i = 0; i < str.size() ; i++)
        {
            if(m[str[i]] == min_val)
            {
                str.erase(i, 1);//删除该元素,要调整迭代器
                --i;
            }
                
        }
        cout << str << endl;
    }
};

int main()
{
    string str;
    getline(cin, str);
    Solution s;
    s.Del_Min_Char(str);
    return 0;
}

全部评论

相关推荐

09-10 15:05
已编辑
门头沟学院 游戏后端
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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