【基础】牛的速记

【基础】牛的速记

题意分析:

题目给出一个小写字母串。 要求找到一个出现次数最多的字母,将该字母从字母串中统统删去,如果出现次数最多的字母不止一个,就删去字典序小那的一个。然后输出这个字符串,重复上面的操作,直到字符串中没有字符。不能输出最后的空串。

解题思路:

因为数据量不大,所以我们可以用桶排序(计数)来做。

算法分析:

读入一个字符串,用桶排序(计数)统计每个字母出现的次数。(关键语句:inc(a[st[i]]);)

用多重循环:

I从最大可能的个数256倒序循环到1(解决了查找最多出现次数的问题)

J从a循环到z(解决了出现次数相同时,查找字典序的问题)

如果a的第j位(就是字母j出现的次数)等于i,

那就再循环i次(因为这里有i个字母j);

把这个字母的位置pos出来,

再delete掉。

然后输出,注:记得判断字符串是不是已经变成了一个空串,如果是,就不用再输出了

答案参考:

var

st:string;

i,k:longint;

j:char;

a:array['a'..'z']of longint;

begin

readln(st);

for i:=1 to length(st) do inc(a[st[i]]);

for i:=256 downto 1 do

for j:='a' to 'z' do

if a[j]=i then

begin

for k:=1 to i do

delete(st,pos(j,st),1);

if st<>'' then writeln(st);

end;

end.

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值