精華區beta Marginalman 關於我們 聯絡資訊
※ 引述《Rushia (みけねこ的鼻屎)》之銘言: : https://leetcode.com/problems/sort-characters-by-frequency/description : 451. Sort Characters By Frequency : 給你一個字串s,把他的所有字元依照出現次數降序排列,如果答案有多個返回任意一個 : 思路: : 1.先數s的每個字元有幾個 : 2.把s數量大於0的字元(計數索引)丟到MaxHeap依照數量排序 : 3.不斷從Heap取出字元並append成一個字串即可 Python3 code: ------------------------------------------------ from collections import Counter class Solution: def frequencySort(self, s: str) -> str: return ''.join(_[0] * _[1] for _ in Counter(s).most_common()) ------------------------------------------------ 第一解 用Counter查出每個字元的數量 再用most_common回傳順序 ------------------------------------------------ from collections import defaultdict class Solution: def frequencySort(self, s: str) -> str: f = defaultdict(int) for char in s: f[char] += 1 sorted_s = sorted(f.keys(), key=lambda x: f[x], reverse=True) return ''.join(char * f[char] for char in sorter_s) ------------------------------------------------ 問ChatGPT說Counter會多用額外的空間 所以就改用dict記錄 ------------------------------------------------ from collections import defaultdict class Solution: def frequencySort(self, s: str) -> str: (f := defaultdict(list)) or [f[char].append(1) for char in s] return ''.join(char * sum(f[char]) for char in sorted(f, key=lambda x: f[x], reverse=True) ------------------------------------------------ 想用一行處理f就改成這樣 不過因為int是不可變 所以改用了list 乘的時候用sum() 不過空間複雜度就上升了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.251.103 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1707282268.A.83A.html
oin1104: 大師 02/07 13:23