You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现多字符串公共字符提取(不使用Counter函数)

提取字符串列表公共字符的非Counter解法提示

嘿,你已经完成了最关键的第一步——把每个字符串的字符频次都统计好了,接下来其实就差两步就能拿到结果啦!

核心思路很简单:公共字符一定是所有字符串都包含的字符,而且它在结果里出现的次数等于所有字符串中该字符频次的最小值。给你拆解下具体要做的事:

  • 先拿第一个字符串的字符计数字典当基准(毕竟公共字符肯定得在第一个字符串里存在嘛)
  • 遍历这个基准里的每一个字符,检查它是不是在其他所有字符串的字典里都有
    • 如果有,就把所有字典里这个字符的频次找出来,取最小的那个数——这个数就是它在结果里该出现的次数
    • 如果某个字符串里没有这个字符,那它肯定不是公共字符,直接跳过
  • 最后把每个符合条件的字符,重复对应次数后放进结果列表就行

给你把代码补全一下,在你原来的commonChars方法里,print(dic)之后加上这段:

result = []
# 以第一个字符串的字符统计为基准
base_counts = dic[0]
for char, count in base_counts.items():
    min_count = count
    # 检查其他所有字符串的统计结果
    for idx in range(1, len(dic)):
        # 如果当前字符不在这个字符串里,直接标记为非公共字符
        if char not in dic[idx]:
            min_count = 0
            break
        # 更新最小出现次数
        if dic[idx][char] < min_count:
            min_count = dic[idx][char]
    # 如果最小次数大于0,就把字符重复对应次数加入结果
    if min_count > 0:
        result.extend([char] * min_count)
return result

拿你给的输入1测试下:

  • 基准是{'a':1, 'b':1, 'e':1, 'l':2}
  • 遍历到'a'时,第三个字符串的字典里没有它,直接跳过;'b'同理
  • 'e'在三个字典里的频次都是1,所以加入1次;'l'的频次都是2,加入2次,最终得到["e","l","l"],完全符合预期

输入2的话,基准是{'c':1, 'o':2, 'l':1}:

  • 'c'在三个字典里都有,最小频次是1,加入1次
  • 'o'的频次分别是2、1、2,最小是1,加入1次
  • 'l'在第三个字符串的字典里没有,跳过
  • 最终得到["c","o"],也符合预期

内容的提问来源于stack exchange,提问作者Ns68

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 18:32:52