判断两个输入词是否为变位词(Anagram)时如何修改代码输出单个布尔值
变位词检测代码修改方案
原代码问题说明
你的代码存在3个核心问题,导致输出不符合预期、且判断结果不准确:
- 打印语句放在for循环内部,每遍历一个字母就输出一次判断结果,是你得到多个True/False的直接原因
- 逻辑存在多处漏洞:
- 无意义的
M.pop(-1)操作会删除第一个输入词的最后一个字符,直接导致判断结果错误 - 仅以第二个词的长度作为循环边界,若两个词长度不一致、或者第一个词更长,都会出现逻辑遗漏
- 无意义的
- 判断逻辑本身错误:你对比的是「M中第i个字符在M内的出现次数」和「N中第i个字符在N内的出现次数」,两者没有对应关系,完全无法正确判断是否为变位词
修改方案
方案1:排序对比法(最简洁高效)
变位词的核心特征是排序后字符序列完全一致,你可以直接用该逻辑实现,代码如下:
Z = input() Y = Z.split() # 长度不同直接判定为不是变位词 if len(Y[0]) != len(Y[1]): print(False) else: # 排序后直接对比序列是否相等 print(sorted(Y[0]) == sorted(Y[1]))
方案2:基于计数逻辑修改(兼容你原有思路)
如果你要保留计数判断的思路,可以按如下方式调整:
Z = input() Y = Z.split() str_a = Y[0] str_b = Y[1] is_anagram = True # 先做长度校验 if len(str_a) != len(str_b): is_anagram = False else: # 遍历两个词所有的去重字符做计数对比 for char in set(str_a + str_b): if str_a.count(char) != str_b.count(char): is_anagram = False # 出现不匹配直接跳出循环,无需后续判断 break print(is_anagram)
内容的提问来源于stack exchange,提问作者nofugz
相关产品推荐
相关产品推荐

