#别人的算法,非常牛,要学习,不要上来就写代码,要思考逻辑,写出优美的算法 #算法描述: #假如a和c在string中的个数都是1, #将a和c带入s.count(x)*1000-ord(x)公式,得到1000-ord(a)和1000-ord(c) #因为ord(a)=97,ord(c)=99,所以1000-ord(a)>1000-ord(c) #因为reverse=True,所以排序结果为a,c #这符合本题的题意:如果统计的个数相同,则按照ASCII码由小到大排序输出 while True: try: s = input() ss = sorted(list(set(s)), key=lambda x:s.count(x)*1000-ord(x), reverse=True) print("".join(ss)) except: break #我的不优美算法 #输入 str1=list(input()) #建立字典统计各个字符出现的次数 dic1={} for x in str1: if x in dic1: dic1[x]=dic1[x]+1 else: dic1[x]=1 #对字典进行排序 sorted_list1 = sorted(dic1.items(), key=lambda item: item[1],reverse=True) #如果字典中两个字符统计的个数相同,则按照ASCII码由小到大进行位置交换 #由于有n个字符,所以要重复n次循环,保证按照ASCII码由小到大进行排序 for n in range(len(str1)): for i in range(len(sorted_list1)-1): if sorted_list1[i][1]==sorted_list1[i+1][1]: if ord(sorted_list1[i][0])>ord(sorted_list1[i+1][0]): sorted_list1[i],sorted_list1[i+1]=sorted_list1[i+1],sorted_list1[i] #输出 a=[] for x in sorted_list1: a.append(x[0]) print(''.join(a))