描述
输入一个只包含小写英文字母和数字的字符串,按照不同字符统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASCII码由小到大排序输出。
数据范围:字符串长度满足 1≤𝑙𝑒𝑛(𝑠𝑡𝑟)≤1000 1≤len(str)≤1000
输入描述:
一个只包含小写英文字母和数字的字符串。
输出描述:
一个字符串,为不同字母出现次数的降序表示。若出现次数相同,则按ASCII码的升序输出。
示例1
输入:
aaddccdc
输出:
cda
说明:
样例里,c和d出现3次,a出现2次,但c的ASCII码比d小,所以先输出c,再输出d,最后输出a.
本题想根据输入的数据,得到对应字符和其出现次数的字典,然后先按照值对字典元素进行降序排序。将初步排序后的字典转化为列表,再对列表的每个元素,按照值的顺序从大到小添加到结果列表中,如果遇到值相等的情况,就先设置一个sublst的列表,用以存储这些值相等的元素,注意无论是在添加还是判断是否与下一个元素相等时,都要先判断一下该元素是否已经在结果列表中了,因为再第二个分支的遍历过程中,完全有可能将多个还没有遍历到的元素添加到结果列表中去,如果在结果列表中,那么直接遍历下一个元素。此外,还需要注意在sublst中添加最后一个以前一个元素值相等的元素,因为条件是向后判断的,sublst的最后一个元素的后面一个元素的值如果和其不同,就不能被添加进去了,要单独添加。
string=input()
chcountdict={}
for ch in string:
if ch not in chcountdict.keys():
chcountdict.update({ch:1})
else:
chcountdict[ch]+=1
sortedoncedict=dict(sorted(chcountdict.items(),key=lambda x:x[1],reverse=True))
lst=[[item,sortedoncedict[item]] for item in sortedoncedict]
reslst=[]
flag=0
for i in range(len(lst)):
if i<len(lst)-1 and lst[i][1]>lst[i+1][1] and lst[i] not in reslst:
reslst.append(lst[i])
elif i<len(lst)-1 and lst[i][1]==lst[i+1][1] and lst[i] not in reslst:
nowindex=i
sublst=[]
sublst.append(lst[nowindex])
nowindex+=1
while nowindex<len(lst)-1 and lst[nowindex][1]==lst[nowindex+1][1]:
sublst.append(lst[nowindex])
nowindex+=1
if nowindex<len(lst)-1:
sublst.append(lst[nowindex])
elif nowindex==len(lst)-1 and lst[nowindex][1]==lst[nowindex-1][1]:
sublst.append(lst[nowindex])
flag=1
sortedlst=sorted(sublst,key=lambda x:ord(x[0]))
reslst+=sortedlst
elif flag==0 and i==len(lst)-1:
reslst.append(lst[i])
for lst in reslst:
print(lst[0],end='')