1002 查找公用字符

题目 1002 查找公用字符

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

示例 1:

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

示例 2:

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

提示:words[i] 由小写英文字母组成

思路

  • 小写字符,公用字符出现频率,立马想到用哈希表可做,且用数组哈希结构即可
  • 用手画一下可知,所求结果是所有单词词频取最小公用词频,如下图:
    image

代码

class Solution:
    def commonChars(self, words: List[str]) -> List[str]:
        if not words: return []
        # 统计第一个词的字符数量
        res = [0] * 26
        for word in words[0]:
            res[ord(word)-ord("a")] += 1
        # 统计第二词及后面词的字符数量,且每个词统计后与前面的字符串进行对比取最小值存入结果中
        for i in range(1, len(words)):
            li1 = [0] * 26
            for word in words[i]:
                li1[ord(word) - ord("a")] += 1
            # 对比前一个词的字符数量取最小值
            res_tmp = []
            for i, j in zip(res, li1):
                res_tmp.append(min(i, j))
            res = res_tmp
        # res存放的是重复字符的数量 [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        # 处理res得到最终的结果
        fin_res = []
        for idx, num in enumerate(res):
            if num == 0: continue
            for i in range(num):
                fin_res.append(chr(idx + 97))
        return fin_res
posted @ 2023-01-03 15:45  时光如你般美好  阅读(19)  评论(0编辑  收藏  举报