判断两个字符串是否相近的代码问题:预期输出与实际不符
问题排查与修正
原代码的核心问题
- 规则理解错误:完全偏离了「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],返回Trueword1='aabbcc', word2='aaabbb':字符集合相同但频率排序[2,2,2]≠[3,3],返回False
内容的提问来源于stack exchange,提问作者Hammad Muhammad
相关产品推荐
相关产品推荐

