首先进行计数,记下每个字母出现多少次
接下来排序,小的在前大的在后
从小的开始往后找,直到第一个不小的
再去循环添加到新的列表中
基本上是暴力解决的,暂时没有想到什么技巧

#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;
}