实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
输入 | 字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。 |
---|---|
输出 | 删除字符串中出现次数最少的字符后的字符串。 |
样例输入 | abcdd |
样例输出 | dd |
注:该题可以用桶子排序的思想解答,先把各个字符分配到各自相对应的桶子中,再计算各个桶子中字符的个数,比较得到出现次数最少的字符个数,然后再根据要求输出即可。这里面桶子的编号和输入字符的位置有对应的关系。
#include<iostream>
#include<stdlib.h>
using namespace std;
int main()
{
int num[26]={0};
char str[50];
gets(str);
int len=strlen(str);
int temp;
int min=-1;
char outp;
if(len>20)
return -1;
for(int i=0;i<len;i++)
{
if(!islower(str[i]))
return -1;
}
for(int i=0;i<len;i++)//该循环将所有字符都分别放进个字所属的桶子内
{
temp=str[i]-'a';
num[temp]++;
}
for(int i=0;i<26;i++)//该循环用于寻找出现次数最少的字母
{
if(num[i]!=0&&min==-1)//将第一个非零的个数赋给min
min=num[i];
else if(num[i]<min&&num[i]!=0)
min=num[i];
}
for(int i=0;i<len;i++)//输出非min
{
if(num[str[i]-'a']!=min)//判断是否为非min
cout<<str[i];
}
system("pause");
return 0;
}