描述: |
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。 |
题目类别: | 字符串 |
难度: | 中级 |
运行时间限制: | 10Sec |
内存限制: | 128MByte |
阶段: | 入职前练习 |
输入: | 字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。 |
输出: | 删除字符串中出现次数最少的字符后的字符串。 |
样例输入: | abcdd |
样例输出: | dd |
#include <iostream>
#include <stdio.h>
#include <string>
#include <algorithm>
#include <map>
#include <vector>
using namespace std;
int main()
{
string str,ret;
map<char,int> mmap;
vector<char> vec;
int lens = 0, i =0;
int minwords = 100000;
cin >> str;
lens = str.size();
/*统计每一个单词的个数*/
for(i = 0; i < lens; i ++)
{
mmap[str[i]]++;
}
/*找出最少的单词个数*/
map<char,int>::iterator it;
for(it = mmap.begin(); it != mmap.end(); it++)
{
if(it->second < minwords)
{
minwords = it->second ;
}
}
/*把一样少的数据,放入到vec中*/
for(it = mmap.begin(); it != mmap.end(); it++)
{
if(it->second == minwords)
{
vec.push_back(it->first);
}
}
/*求出结果字符串*/
lens = str.size();
vector<char>::iterator it_vec;
for(i = 0; i < lens; i++)
{
it_vec = find(vec.begin(),vec.end(),str[i]);
/*没有找到*/
if(it_vec == vec.end())
{
ret = ret + str[i];
}
}
cout << ret << endl;
return 0;
}