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

判断两个输入词是否为变位词(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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:36:02