【基础】牛的速记
题意分析:
题目给出一个小写字母串。 要求找到一个出现次数最多的字母,将该字母从字母串中统统删去,如果出现次数最多的字母不止一个,就删去字典序小那的一个。然后输出这个字符串,重复上面的操作,直到字符串中没有字符。不能输出最后的空串。
解题思路:
因为数据量不大,所以我们可以用桶排序(计数)来做。
算法分析:
读入一个字符串,用桶排序(计数)统计每个字母出现的次数。(关键语句: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.