Python实现:判断两字符串字符长度及出现次数是否相同(禁用collections/sort)
解决字符串字符频次匹配问题
你的现有函数只验证了字符串长度和包含的字符集合一致,但完全没考虑每个字符的出现次数——比如s3="aab"和s4="abb",两者长度相同、字符集合都是{'a','b'},但a和b的出现次数正好相反,实际应该返回False,但你的函数会错误返回True,这就是问题根源。
要实现需求,必须手动统计每个字符的出现频次,用字典记录即可,无需额外模块,以下是修正后的代码:
def check(s1, s2): # 长度不一致直接返回False if len(s1) != len(s2): print(False) return # 统计第一个字符串的字符出现次数 char_count = {} for char in s1: if char in char_count: char_count[char] += 1 else: char_count[char] = 1 # 用第二个字符串抵消字符频次 for char in s2: # 出现第一个字符串没有的字符,直接返回False if char not in char_count: print(False) return char_count[char] -= 1 # 频次减到0就删除键,简化后续检查 if char_count[char] == 0: del char_count[char] # 字典为空说明所有字符频次完全匹配 print(len(char_count) == 0) # 测试案例 s3 = "aab" s4 = "abb" check(s3, s4) # 输出False s1 = "aabbcc" s2 = "abcabc" check(s1, s2) # 输出True
代码逻辑说明
- 先校验长度:长度不同的字符串,字符频次必然不可能一致,直接排除;
- 统计第一个字符串的字符频次:用字典键存储字符,值存储对应出现次数;
- 抵消频次:遍历第二个字符串,对每个字符在字典中的频次减1,若遇到字典中没有的字符,直接返回
False; - 最终校验:若字典为空,说明所有字符的频次都完全抵消,两个字符串的字符频次完全一致。
内容的提问来源于stack exchange,提问作者Elioth2022
相关产品推荐
相关产品推荐

