奶牛们误解了速记的含义。他们是这样理解的: 给出一个少于255个字母的小写字母串。 找到一个出现次数最多的字母,将该字母从字母串中统统删去,如果出现次数最多的字母不止一个,就删去在字母表中靠前的一个,即序号小的那个,已知a的序号为97,b的序号为98,c的序号为99,以此类推。 然后输出这个字符串,重复上面的操作,直到字符串中没有字符。当然,你不应该输出最后的空串。 虽然他们误解了,但是这却是一个非常好的程序设计想法。用你的程序实现这个过程!
包含一行,即这个字符串。
一些连续的字符串(如题目中描述的),每行一个字符串。
样例输入
复制maryhadalittlelambitsfleecewaswhite
样例输出
复制mryhdlittlelmbitsfleecewswhite
mryhdlittllmbitsflcwswhit
mryhdittmbitsfcwswhit
mryhdimbisfcwswhi
mryhdmbsfcwswh
mrydmbsfcwsw
rydbsfcwsw
rydbfcww
rydbfc
rydfc
rydf
ryf
ry
y
_____________________________________________________________________________
这道题还可以暴力,但凡255变成2550这道题就是算法题了;
全班第一个做出来的芜湖~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
写作不易,点个赞呗!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!?
_____________________________________________________________________________
#include <bits/stdc++.h>
using namespace std;
struct node{
int a;
char b;
}D[100005];
bool cmp(node x,node y){
if(x.a!=y.a)return x.a>y.a;
return x.b<y.b;
}
int a[1000005];
string s;
int main(){
cin>>s;
for(int i=0;i<s.size();i++){
D[s[i]-'a'+1].a++;
D[s[i]-'a'+1].b=s[i];
}
sort(D,D+27,cmp);
for(int i=0;;i++){
bool flag=true;
for(int j=0;j<s.size();j++){
if(s[j]==D[i].b)a[j]=1;
else if(a[j]!=1)flag=false,cout<<s[j];
}
cout<<endl;
if(flag==true)return 0;
}
}