美文网首页算法算法提高之LeetCode刷题
1002. 查找常用字符(Python)

1002. 查找常用字符(Python)

作者: 玖月晴 | 来源:发表于2019-06-02 19:01 被阅读0次

    更多精彩内容,请关注【力扣简单题】

    题目

    难度:★★☆☆☆
    类型:字符串

    给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。

    你可以按任意顺序返回答案。

    提示
    1 <= A.length <= 100
    1 <= A[i].length <= 100
    A[i][j] 是小写字母

    示例

    示例 1
    输入:["bella","label","roller"]
    输出:["e","l","l"]

    示例 2
    输入:["cool","lock","cook"]
    输出:["c","o"]

    解答

    方案1:统计每个单词

    我们为每个单词准备一个长度为26的列表,列表中第i个元素代表字母表中第i个字母在这个单词中出现的次数,然后我们取26个字母在每个单词出现的最小次数,得到结果。

    class Solution:
        def commonChars(self, A):
            """
            :param A: List[str]
            :return: List[str]
            """
    
            def counter(word):
                res = [0] * 26
                for a in word:
                    res[ord(a)-97] += 1
                return res
    
            count = [counter(w) for w in A]
    
            min_count = [min([w[i] for w in count]) for i in range(26)]
    
            res = []
            for i in range(26):
                while min_count[i] > 0:
                    res.append(chr(i+97))
                    min_count[i] -= 1
    
            return res
    

    方案2:只统计第一个单词

    取出第一个单词中的所有字母组成集合,然后考察该集合中的字母在每个单词中出现过的最小次数。

    class Solution(object):
        def commonChars(self, A):
            """
            :type A: List[str]
            :rtype: List[str]
            """
            res = []
            if not A:
                return res
            key = set(A[0])
            for k in key:
                minnum = min(a.count(k) for a in A)
                res += minnum*k
            return res
    

    如有疑问或建议,欢迎评论区留言~

    相关文章

      网友评论

        本文标题:1002. 查找常用字符(Python)

        本文链接:https://www.haomeiwen.com/subject/fqtfxctx.html