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

Python中Anagram函数对部分单词莫名返回False的问题排查

问题分析

你的代码核心问题是双重循环会重复统计相同字符:比如anagram里的每个a,都会和nagaram里的所有a匹配一次,导致计数远超过字符串实际长度。比如两个单词都是7个字符,但你的计数器会算出13——因为3个a互相匹配就贡献了9次,加上其他字符的匹配,总次数自然不对。

修复方案

这里给你几种简单靠谱的实现方式:

方法1:排序后比较

变位词排序后字符顺序完全一致,直接排序后对比即可:

def is_anagram(worda: str, wordb: str) -> bool:
    if len(worda) != len(wordb):
        return False
    return sorted(worda) == sorted(wordb)

print(is_anagram("anagram", "nagaram"))  # 输出True

方法2:用Counter统计字符频率

Python的collections.Counter可以直接统计每个字符的出现次数,两个变位词的Counter必然相等:

from collections import Counter

def is_anagram(worda: str, wordb: str) -> bool:
    return Counter(worda) == Counter(wordb)

print(is_anagram("anagram", "nagaram"))  # 输出True

方法3:手动统计字符(不用内置库)

如果不想用内置库,可以手动用字典统计每个字符的出现次数,再对比:

def is_anagram(worda: str, wordb: str) -> bool:
    if len(worda) != len(wordb):
        return False
    
    count = {}
    # 统计第一个单词的字符频率
    for char in worda:
        count[char] = count.get(char, 0) + 1
    # 用第二个单词抵消计数
    for char in wordb:
        if count.get(char, 0) == 0:
            return False
        count[char] -= 1
    # 所有计数都应为0
    return all(v == 0 for v in count.values())

print(is_anagram("anagram", "nagaram"))  # 输出True

内容的提问来源于stack exchange,提问作者Yael Chen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:52:09