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

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. 先校验长度:长度不同的字符串,字符频次必然不可能一致,直接排除;
  2. 统计第一个字符串的字符频次:用字典键存储字符,值存储对应出现次数;
  3. 抵消频次:遍历第二个字符串,对每个字符在字典中的频次减1,若遇到字典中没有的字符,直接返回False;
  4. 最终校验:若字典为空,说明所有字符的频次都完全抵消,两个字符串的字符频次完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:39:15