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

判断两个字符串是否相近的代码问题:预期输出与实际不符

问题排查与修正

原代码的核心问题

  • 规则理解错误:完全偏离了「Close Strings」的判定逻辑,仅做简单的字符存在性匹配并删除元素,忽略了两个核心判定条件:字符集合必须完全一致、字符出现频率的多重集合必须一致。
  • 冗余无效操作:对单个字符执行strip()毫无意义,无法改变字符本身。
  • 逻辑漏洞:修改列表元素为空字符串的操作导致循环逻辑混乱,比如输入'a'和'aa'时,仅匹配删除了一个'a',剩余字符未被检查,最终错误返回True。

正确的判定逻辑(Close Strings定义)

两个字符串相近需同时满足:

  • 两者包含的字符集合完全相同(word1出现的所有字符都在word2中出现,反之亦然)
  • 两者的字符出现频率排序后完全一致(比如word1中字符频率为[2,1],word2的频率排序后也必须是[2,1])

修正后的代码

from collections import Counter

class Solution:
    def closeStrings(self, word1: str, word2: str) -> bool:
        # 长度不同直接返回False,频率总和不等,不可能满足条件
        if len(word1) != len(word2):
            return False
        # 统计两个字符串的字符频率
        count1 = Counter(word1)
        count2 = Counter(word2)
        # 检查字符集合是否完全一致
        if count1.keys() != count2.keys():
            return False
        # 检查频率排序后的结果是否一致
        return sorted(count1.values()) == sorted(count2.values())

# 测试示例
print(Solution().closeStrings(word1='a', word2='aa'))  # 输出False

验证结果

输入word1='a', word2='aa'时,因长度1≠2直接返回False,符合预期。
其他测试场景:

  • word1='abc', word2='bca':字符集合相同、频率均为[1,1,1],返回True
  • word1='aabbcc', word2='aaabbb':字符集合相同但频率排序[2,2,2]≠[3,3],返回False

内容的提问来源于stack exchange,提问作者Hammad Muhammad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:35:16