leetcode_1002 查找共用字符

123 阅读1分钟

要求

给你一个字符串数组 words ,请你找出所有在 words 的每个字符串中都出现的共用字符( 包括重复字符),并以数组形式返回。你可以按 任意顺序 返回答案。  

示例 1:

输入:words = ["bella","label","roller"]
输出:["e","l","l"]

示例 2:

输入:words = ["cool","lock","cook"]
输出:["c","o"]

核心代码

class Solution:
    def commonChars(self, words: List[str]) -> List[str]:
        import collections
        n = len(words)
        dic = [collections.Counter(words[i]) for i in range(n)]
        compare = dic[0]

        for i in range(1,n):
            for key in compare:
                compare[key] = min(compare[key],dic[i][key])
        
        res = list()
        for key in compare:
            for i in range(compare[key]):
                res.append(key)
        return res

image.png

解题思路:比较核心的一句代码是compare[key] = min(compare[key],dic[i][key]),因为我们是要找公共的字符,所以我们以一个统计字典进行存储即可,在这个字典中存在键在其他的统计字典中都有,就直接替换成最小的那个值,如果当前统计字典中的数据是没有的,就会返回零,也就是不存在,最后我们使用循环将公共数据放到一起,后面的二次循环是一个字母可能有多次的重复,所以我们需要向其中加入n次,最终得到想要的结果。