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
相关产品推荐
相关产品推荐

