首先进行计数,记下每个字母出现多少次
接下来排序,小的在前大的在后
从小的开始往后找,直到第一个不小的
再去循环添加到新的列表中
基本上是暴力解决的,暂时没有想到什么技巧
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
char str[25],dir[25];
struct letter{
char ch;
int count;
}let[27];
bool cmp(letter let1,letter let2){
return let1.count<let2.count;
}
int main(){
while(cin.getline(str,25)){
memset(dir,0,sizeof(dir));
int len=strlen(str);
for(int i=0;i<27;i++){
let[i].ch='a'+i;
let[i].count=0;
}
for(int i=0;i<strlen(str);i++){
let[str[i]-'a'].count++;
}
sort(let,let+27,cmp);
int s=0;
while(let[s].count==0){
s++;
}
int sum=let[s].count;
while(let[s].count==sum){
for(int i=0;i<len;i++){
if(str[i]==let[s].ch){
str[i]='0';
}
}
s++;
}
for(int i=0,k=0;i<len;i++){
if(str[i]!='0'){
dir[k++]=str[i];
}
}
cout<<dir<<endl;
}
return 0;
} 
京公网安备 11010502036488号