給定僅有小寫字母組成的字串陣列 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