如何实现不限制长度判断一个单词是否可由另一个单词的字母构成
问题根因
现有代码的判断逻辑为两个单词的字母计数字典完全相等,仅能实现变位词校验功能,要求两个单词的字母构成、各字母出现次数完全一致,所以只有长度相同时才会返回正确结果。你遇到的HEART包含EAT所有字母但返回错误的问题,就是因为HEART的字母计数字典多了H、R两个字母的计数项,两个字典不相等导致判定失败。
修复方案
将原有的全字典相等校验,替换为校验第一个单词的所有字母需求都能被第二个单词满足,只要同时符合以下两个条件即可判定为可组成:
- 第一个单词用到的所有字母,第二个单词中都存在
- 第一个单词中每个字母的出现次数,不超过第二个单词中对应字母的出现次数
修改后的完整代码
def word_checker(): word_1 = input('Enter a word: ').upper() word_2 = input('Enter another word: ').upper() # 统计第一个单词的字母计数 word_1_dict = {} for char in word_1: word_1_dict[char] = word_1_dict.get(char, 0) + 1 # 统计第二个单词的字母计数 word_2_dict = {} for char in word_2: word_2_dict[char] = word_2_dict.get(char, 0) + 1 # 校验第一个单词的所有字母需求是否被满足 can_create = True for char, required_count in word_1_dict.items(): if char not in word_2_dict or word_2_dict[char] < required_count: can_create = False break if can_create: print("THAT WORD CAN BE CREATED") else: print("THAT WORD CANT BE CREATED") word_checker()
内容的提问来源于stack exchange,提问作者dfag34t
相关产品推荐
相关产品推荐

