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