牛的速记(c++题解)

2024-01-09 07:38:07

题目描述

奶牛们误解了速记的含义。他们是这样理解的: 给出一个少于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;
	}
}

文章来源:https://blog.csdn.net/hb_zhyu/article/details/135417223
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。