python-leetcode-1002. 查找共用字符

1002. 查找共用字符 - 力扣(LeetCode)

可以使用 Python 解决这个问题。思路如下:

  1. collections.Counter 统计第一个单词的字符出现次数,作为初始的字符计数。

  2. 遍历剩余的单词,逐个更新计数,取每个字符的最小出现次数。

  3. 根据最终的计数构造答案列表。

下面是具体实现:

from collections import Counter

def commonChars(words):
    # 初始化计数器为第一个单词的字符计数
    common_count = Counter(words[0])
    
    # 逐步与后续单词的字符计数取交集(最小值)
    for word in words[1:]:
        common_count &= Counter(word)
    
    # 展平计数器,转换为字符数组
    return list(common_count.elements())

# 示例
words = ["bella", "label", "roller"]
print(commonChars(words))  # 输出: ['e', 'l', 'l']

解释:

  • Counter(words[0]) 统计第一个单词的字符出现次数。

  • 依次取与 Counter(word) 的交集(& 操作符),保证每个字符只取最小出现次数。

  • common_count.elements() 展开字符并返回最终结果。

这种方法保证了时间复杂度大约为 O(N⋅M),其中 N 是单词数,M 是单词平均长度。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值