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

Python中统计可由指定字符串字符(仅单次使用)构成的目标字符串数量的实现问题

Python中统计可由指定字符串字符(仅单次使用)构成的目标字符串数量的实现问题

嗨,我来帮你搞定这个问题!咱们先理清楚核心需求:给定一个目标字符串列表targets和一个字符池chars,每个字符只能被使用一次,要找出列表里有多少个目标字符串能被chars中的字符拼出来。

先看你给的例子:targets = ["cat","bt","hat","tree"], chars = "atach",正确结果应该是3——"cat"、"hat"能被构成,"bt"缺字符b,"tree"需要两个e但chars里没有,所以这两个不算。

你已经写了代码的开头,我来帮你补全并解释清楚思路:

核心思路是统计字符频率:先统计chars里每个字符的出现次数,然后对每个目标单词,统计它的字符需求,只要每个字符的需求数量不超过chars里的存量,这个单词就能被构成。

完整代码如下:

from collections import Counter

targets = ["cat","bt","hat","tree"]
chars = "atach"

ans = 0
chars_freq = Counter(chars)  # 统计chars中每个字符的出现次数,结果是{'a':2, 't':2, 'c':1, 'h':1}

for word in targets:
    word_freq = Counter(word)  # 统计当前目标单词的字符需求
    can_form = True
    for char, count in word_freq.items():
        # 如果chars里该字符的数量不够,直接标记为不能构成
        if chars_freq.get(char, 0) < count:
            can_form = False
            break
    if can_form:
        ans += 1

print(ans)  # 输出:3

如果想让代码更简洁,还可以用all()函数简化判断逻辑,一行代码完成检查:

from collections import Counter

targets = ["cat","bt","hat","tree"]
chars = "atach"

ans = 0
chars_freq = Counter(chars)

for word in targets:
    # 用all()判断所有字符的需求是否都满足
    if all(chars_freq.get(char, 0) >= count for char, count in Counter(word).items()):
        ans += 1

print(ans)

这样运行后就能得到正确的数量啦,逻辑是不是很清晰?

备注:内容来源于stack exchange,提问作者Sophia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 17:05:32