用一个数组作为辅助,前10个存数字,后26个存字母出现次数。

using namespace std;
int main(){
    string s;
    while(cin>>s){
        int a[36]={0};//后26位存字母出现次数,前10位存数字出现次数。
        for(int i=0;i<s.size();i++){
            if(s[i]>='a'&&s[i]<='z'){
                a[s[i]-'a'+10]++;
            }
            else{
                a[s[i]-'0']++;
            }
        }
        int num=0;//记录不为0的个数
        for(int i=0;i<36;i++){
            if(a[i]!=0){
                num++;
            }
        }
        for(int i=0;i<num;i++){
            int max=0;//记录出现的最大次数
            int k=0;//记录出现最大次数的位置。
            for(int j=0;j<36;j++){
                if(a[j]>max)//注意这里不能写≥,因为要保证是第一个最大值先输出
                {
                    max=a[j];
                    k=j;
                }
             }
             if(k>=10){
                 cout<<char('a'+k-10);
                 a[k]=0;
                }
                else{
                    cout<<k;
                    a[k]=0;
                }
        }  
        cout<<endl;
    }
}