删除字符串中出现次数最少的字符
来源:互联网 发布:淘宝一元包邮的店 编辑:程序博客网 时间:2024/06/10 11:28
题目描述
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
输入描述:
字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。
输出描述:
删除字符串中出现次数最少的字符后的字符串。
示例1
输入
abcdd
输出
dd
解题思路
考虑了两种方法。第一种比较常规,首先遍历一遍字符串,把每个字符的出现次数统计出来,连同字符本身一起存到数组里(为了方便查找字符,用的是unordered_map);然后再遍历一遍数组,找出最小出现次数;最后再遍历一遍数组,找出最小出现次数对应的字符,在字符串中将所有该字符删除。
第二种方法相对更简单一点。首先定义一个大小为26的数组,用来存26个小写字母出现的次数;然后遍历一遍字符串,把每个字符的出现次数统计出来,存在数组中;接着遍历一遍数组,找出最小出现次数;最后遍历一遍字符串,检查每个字符的出现次数,如果并非最小出现次数,则保留该字符。
第二种方法相比于第一种方法的简单之处在于,要删除一个字符,可能该字符在字符串中出现多次,删除比较麻烦。而保留字符则简单的多。另外,第一种方法需要一个哈希表存每个字符即可对应的出现次数,第二种方法只需要一个数组。
代码
#include <iostream>#include <string>#include <unordered_map>#include <vector>using namespace std;int main(){ string str; while (cin >> str) { /* 删除出现最少的字符 unordered_map<char, int> charNumMap; for (char ch: str) //记录每个字符出现的次数 { charNumMap[ch]++; } int min = str.size(); for (auto iter = charNumMap.begin(); iter != charNumMap.end(); iter++) //找到最小值 { if (min > (*iter).second) min = (*iter).second; } char todel; for (auto iter = charNumMap.begin(); iter != charNumMap.end(); iter++) //删除出现最少的字符 { if (min == (*iter).second) { todel = (*iter).first; //待删除字符 int begin = 0, index = 0; while (begin < str.size() && str.find(todel, begin) != string::npos) { index = str.find(todel, begin); //找到待删除字符位置 str.erase(index, 1); //删除该字符 } } } cout << str << endl; */ // 保留输出非最少的字符 vector<int> num(26); //记录26个字符的出现次数 for (char ch : str) //计算每个字符出现次数 { num[ch - 'a']++; } int min = str.size(); for (int n : num) //找出最小出现次数 { if (n != 0 && n < min) min = n; } string str2; for (char ch : str) //将出现次数非最小的字符存下来 { if (num[ch - 'a'] != min) str2 += ch; } cout << str2 << endl; } return 0;}
阅读全文
0 0
- 算法分析---删除字符串中出现次数最少的字符
- 删除字符串中出现次数最少的字符
- HWOJ 删除字符串中出现次数最少的字符
- 删除字符串中出现次数最少的字符
- 删除字符串中出现次数最少的字符
- 删除一个字符串中出现次数最少的字符
- 删除字符串中出现次数最少的字符
- 删除字符串中出现次数最少的字符
- 删除字符串中出现次数最少的字符
- 删除字符串中出现次数最少的字符
- 华为oj 删除字符串中出现次数最少的字符
- 华为OJ 删除字符串中出现次数最少的字符
- (java)删除字符串中出现次数最少的字符
- 删除字符串中出现次数最少的字符
- 删除字符串中出现次数最少的字符
- 实现删除字符串中出现次数最少的字符
- 【华为 OJ 】删除字符串中出现次数最少的字符
- 华为oj 删除字符串中出现次数最少的字符
- HDU1074:Doing Homework(状态压缩DP)
- Java NIO 基础
- 剑指offer面试题[34]丑数
- redux 在 React-Native 工作中的使用
- JZ2440 中断学习
- 删除字符串中出现次数最少的字符
- 笔记2
- 完全覆盖1-OJ
- c++ demo: 单词转换
- 《数据压缩》实验报告六·MPEG-1 Audio编码器
- linux内核分析——CFS(完全公平调度算法)
- 你以为的效率,可能只是焦虑
- 从编译过程看java的泛型
- Android仿百度贴吧客户端Loading小球