451. 根據字元出現頻率排序(中等,字串)(12.23)
阿新 • • 發佈:2019-01-05
給定一個字串,請將字串裡的字元按照出現的頻率降序排列。
示例 1:
輸入: "tree" 輸出: "eert" 解釋: 'e'出現兩次,'r'和't'都只出現一次。 因此'e'必須出現在'r'和't'之前。此外,"eetr"也是一個有效的答案。
class Solution(object): def frequencySort(self, s): """ :type s: str :rtype: str """ d = {} for i in range(len(s)): if s[i] in d: d[s[i]] += 1 else: d[s[i]] = 1 list1 = zip(d.values(),d.keys()) list1.sort(reverse=True) res = "" for i in range(len(list1)): res += list1[i][1]*list1[i][0] return res
執行用時: 52 ms, 在Sort Characters By Frequency的Python提交中擊敗了81.58% 的使用者
class Solution(object): def frequencySort(self, s): """ :type s: str :rtype: str """ from collections import Counter count=collections.Counter(s).most_common() res='' for c,v in count: res+=c*v return res
Counter 集成於 dict 類,因此也可以使用字典的方法,此類返回一個以元素為 key 、元素個數為 value 的 Counter 物件集合
>>> from collections import Counter
>>> s = "hello pinsily"
>>> d = Counter(s)
>>> d
Counter({'l': 3, 'i': 2, 'h': 1, 'e': 1, 'o': 1, ' ': 1, 'p': 1, 'n': 1, 's': 1, 'y': 1})
elements() 返回一個迭代器 >>> d.elements() <itertools.chain object at 0x0000019AC812BBA8> # 可以進行列印和排序 >>> for i in d.elements(): ... print(i) ... most_common(n) 返回數量最多的前 n 個元素 >>> d.most_common(3) [('l', 3), ('i', 2), ('h', 1)] subtract([iterable-or-mapping]) 相當於減法,呼叫這個方法的 Counter 會被覆蓋掉 >>> c = Counter(a=4, b=2, c=0, d=-2) >>> d = Counter(a=1, b=2, c=3, d=4) >>> c.subtract(d) >>> c Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6}) >>> d Counter({'d': 4, 'c': 3, 'b': 2, 'a': 1})