用一个数组作为辅助,前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;
}
}