题解 | #删除字符串中出现次数最少的字符#
删除字符串中出现次数最少的字符
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; }