题解 | #删除字符串中出现次数最少的字符#
删除字符串中出现次数最少的字符
https://www.nowcoder.com/practice/05182d328eb848dda7fdd5e029a56da9
//
// Created by on 2022/8/1.
//
//描述
// 实现删除字符串中出现次数最少的字符,若出现次数最少的字符有*多个*,则把出现次数最少的字符都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
//
//数据范围:输入的字符串长度满足 1 \le n \le 20 \1≤n≤20 ,保证输入的字符串中仅出现小写字母
// 输入描述:
//字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。
//
//输出描述:
// Created by on 2022/8/1.
//
//描述
// 实现删除字符串中出现次数最少的字符,若出现次数最少的字符有*多个*,则把出现次数最少的字符都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
//
//数据范围:输入的字符串长度满足 1 \le n \le 20 \1≤n≤20 ,保证输入的字符串中仅出现小写字母
// 输入描述:
//字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。
//
//输出描述:
//删除字符串中出现次数最少的字符后的字符串。
#include<iostream>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
//定义比较的函数 无论是 min_ele 还是 max_ele 第一个小于第2个那么返回true
bool cmp_value(const pair<int, int> left,const pair<int,int> right)
{
return left.second < right.second;
}
int main()
{
string s;
cin>>s;
map<char,int> mp;
for( auto & c:s){
mp[c]++;
}
auto it = min_element(mp.begin(),mp.end(),cmp_value) ;
// 对于 map 返回的迭代器 能不能向 vector 那样 相减
for (auto &ele:s){
if( mp[ele] != it->second){
cout<<ele;
}
}
return 0;
}