力扣每日一题(1)

力扣每日一题

查找常用字符

链接 :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

猜你喜欢

转载自blog.csdn.net/weixin_50017145/article/details/109118672