鱼C论坛

 找回密码
 立即注册
查看: 3215|回复: 57

[已解决]Python:每日一题 387

[复制链接]
发表于 2020-4-30 13:30:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
今天的题目:


给定一个字符串,将字符串里的字符按照出现的次数降序排列,并返回排列后的字符串。

示例 1:

输入:"tree"
输出:"eert"
解释:'e' 出现两次,'r' 和 't' 都只出现一次。因此 'e' 必须出现在 'r' 和 't' 之前。
说明:此外,"eetr" 也是正确的答案。
示例 2:

输入:"cccaaa"
输出:"cccaaa"
解释:'c' 和 'a' 都出现三次。
说明:此外,"aaaccc" 也是有效的答案。
注意:"cacaca"是不正确的,因为相同的字母必须放在一起。
示例 3:

输入:"Aabb"
输出:"bbAa"
说明:此外,"bbaA" 也是正确的答案,但 "Aabb" 是不正确的。


欢迎大家一起答题!
最佳答案
2020-4-30 16:52:47
  1. def f387(s:str):
  2.     from collections import Counter
  3.     r = [i for i in Counter(s).most_common()]
  4.     return ''.join(i*j for i,j in r)
复制代码

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-30 13:31:25 | 显示全部楼层
占楼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-30 13:36:06 | 显示全部楼层
  1. class Solution:
  2.     def frequencySort(self, s: str) -> str:
  3.         s=sorted(s)
  4.         s.sort(key=collections.Counter(s).get,reverse=True)
  5.         return ''.join(s)
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 13:36:47 | 显示全部楼层
本帖最后由 sunrise085 于 2020-4-30 14:07 编辑
  1. def fun387(string):
  2.     result=''
  3.     myset=set(string)
  4.     mylist=[]
  5.     for ch in myset:
  6.         mylist.append(([ch,string.count(ch)]))
  7.    
  8.     mylist.sort(key=lambda ele:ele[1],reverse=True)
  9.     for list1 in mylist:
  10.         result+=list1[0]*list1[1]
  11.     return result
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 14:00:49 | 显示全部楼层
  1. from collections import Counter
  2. def f387(s):
  3.     res,l = '',sorted(list(Counter(s).items()),reverse=True,key=lambda i: i[1])
  4.     for i in l:
  5.         res += i[0]*i[1]
  6.     return res
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 14:03:14 | 显示全部楼层
本帖最后由 Twilight6 于 2020-4-30 14:56 编辑
  1. string = input('请输入一个字符串~:')
  2. set_str = set(string)
  3. count_dict = {}
  4. for i in set_str:
  5.     count_dict[i] = string.count(i)
  6. new_count_list = sorted(list(zip(count_dict.keys(),count_dict.values())),key=lambda x:x[1])
  7. for i in new_count_list[::-1]:
  8.     print(i[0]*i[1],end='')
复制代码


唉,我怎么感觉只会写暴力的

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 14:06:45 | 显示全部楼层
  1. from collections import Counter
  2. def f387(s):
  3.     return ''.join([i[0]*i[1] for i in sorted(list(Counter(s).items()),reverse=True,key=lambda i: i[1])])
复制代码

评分

参与人数 1鱼币 +1 收起 理由
zltzlt + 1 一样的速度

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 14:11:33 | 显示全部楼层
  1. def func(string):
  2.     list1 = [i for i in string]
  3.     list1.sort(key = lambda x: (string.count(x), x), reverse = True)
  4.     return ''.join(list1)
复制代码

评分

参与人数 1荣誉 +4 鱼币 +3 收起 理由
zltzlt + 4 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 14:19:33 | 显示全部楼层
本帖最后由 March2615 于 2020-4-30 15:07 编辑
  1. def daily387(s):
  2.     return ''.join(k * v for k, v in Counter(s).most_common())
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-4-30 14:30:13 | 显示全部楼层
后排
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-30 14:30:45 | 显示全部楼层
本帖最后由 悠悠2264 于 2020-4-30 20:19 编辑
  1. def fun387(s):
  2.     result = ''
  3.     d = {}
  4.     for i in s:
  5.         try:
  6.             d[i] = d[i] + 1
  7.         except:
  8.             d[i] = 1
  9.     for c in range(len(s)):
  10.         t = None
  11.         for i in d:
  12.             t = i if t == None or d[t] < d[i] else t  
  13.         for p in range(d[t]):
  14.             result = result + t
  15.         d[t] = 0
  16.     return result
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
zltzlt + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 14:43:19 | 显示全部楼层

  1. def reverse_sort(string):
  2.     return_str = ""
  3.     length = len(set(string))
  4.     zero = [0 for i in range(length)]
  5.     str_dict = dict(zip(set(string), zero))
  6.     for each in string:
  7.         str_dict[each] += 1
  8.     sorted_str = sorted(str_dict.items(), key=lambda item:item[1], reverse=True)
  9.     for each in sorted_str:
  10.         for i in range(each[1]):
  11.             return_str += each[0]
  12.     return return_str
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 15:06:27 | 显示全部楼层
本帖最后由 qiuyouzhi 于 2020-4-30 16:33 编辑

随便写写
  1. def func(str1):
  2.     return ''.join(sorted(str1, key = lambda c: str1.count(c), reverse = True))
复制代码

改一下:
  1. func = lambda str1: ''.join(sorted(str1, key = lambda c: str1.count(c), reverse = True))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 15:09:54 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 15:37:27 | 显示全部楼层
  1. def timu387(s):
  2.     if s.strip() == '':
  3.         return ''
  4.     sa = set(s)
  5.     ra=''
  6.     da = {}
  7.     for i in sa:
  8.         da[i] = s.count(i)
  9.     la = sorted(da.items(), key=lambda x: x[1], reverse=True)
  10.     for ik,iv in la:
  11.         ra = ra+ik*iv
  12.     return ra
  13. print(timu387('tree'))
  14. print(timu387('cccaaa'))
  15. print(timu387('Aabb'))
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 15:40:10 | 显示全部楼层
  1. def f387(s):
  2.     sc = sorted(Counter(s).items(), key = lambda x: x[1], reverse=True)
  3.     return ''.join(val * c for val, c in sc)
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 16:10:42 | 显示全部楼层
  1. def f387(s):
  2.     tmp = set(s)
  3.     letter = list(tmp)
  4.     num = []
  5.     for i in letter:
  6.         num.append(s.count(i))
  7.     res = ""
  8.     for i in range(len(letter)) :
  9.         max_index = num.index(max(num))
  10.         res += num.pop(max_index) * letter.pop(max_index)
  11.     return res
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-4-30 16:33:15 | 显示全部楼层
凑热闹.png
代码如下:
  1. def solve(s:str)->str:
  2.     d = {x:s.count(x) for x in set(s)}
  3.     return ''.join([x*d[x] for x in sorted(d.keys(),key=lambda a:d[a],reverse=1)])

  4. if __name__ == '__main__':
  5.     print('示例1 输出:',solve("tree"))
  6.     print('示例2 输出:',solve("cccaaa"))
  7.     print('示例3 输出:',solve("Aabb"))
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 16:52:15 | 显示全部楼层

我给忘了在哪看到的了
里面讲的就是找最多最少字符,出现次数前几的字符,就用那个most_common()
本来想用sorted,但是我的reverse参数不知道为什么不能设置切片又不好看,甚至能找到错误答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 16:52:47 | 显示全部楼层    本楼为最佳答案   
  1. def f387(s:str):
  2.     from collections import Counter
  3.     r = [i for i in Counter(s).most_common()]
  4.     return ''.join(i*j for i,j in r)
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-6 10:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表