力扣每日一題(1)

2020-10-17 14:02:21

力扣每日一題

查詢常用字元

連結 :https://leetcode-cn.com/problems/find-common-characters/solution/cha-zhao-chang-yong-zi-fu-by-leetcode-solution/

給定僅有小寫字母組成的字串陣列 A,返回列表中的每個字串中都顯示的全部字元(包括重複字元)組成的列表。例如,如果一個字元在每個字串中出現 3 次,但不是 4 次,則需要在最終答案中包含該字元 3 次。

from collections import Counter
def commonchars(A):
    res = None
    for a in A:
        c = Counter(a)
        if res is None:
            res = c
        else:
            res &= c
    return list(res.elements())

輸入 [「bella」,「label」,「roller」]
輸出 [「e」,「l」,「l」]
預期結果 [「e」,「l」,「l」]

題目很簡單,要點是如何排開列表內各字串各字母的出現頻率,這裡直接呼叫Counter功能,Counter工具用於支援便捷和快速的計數,

from collections import Counter
cnt = Counter()
for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
    cnt[word] += 1
print cnt

輸出為

Counter({'blue':3,'red':2,'green':1})

res &= c,展開式:res = res & c Counter特有的算數運算,使用&時,取兩個Counter物件中交集元素計數小的結果。
例子:

Counter(‘AAB’) & Counter(‘BBCC’)

結果是:

{‘B’: 1}

過程:
第一步:得到元素計數:

{‘A’:2, 「B」:1} , {‘B’:2,‘C’:2}

 第二步:取交集:

{‘B’:1} & {‘B’:2}

 第三步:得出結果:取計數小的結果:

{‘B’: 1}

結束! 每日一題————2020-10-16