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

字符串按字符总出现次数编码问题求助:代码输出不符预期

问题分析

你的代码实现的是连续字符游程编码(统计相邻重复字符的次数),但需求是统计每个字符在整个字符串中的总出现次数,逻辑方向完全错误,所以结果和预期不符。

修正方案

要实现全局字符计数编码,核心是先统计每个字符在字符串中的总出现次数,再按字符在原字符串中的首次出现顺序去重输出,具体步骤如下:

  1. 遍历字符串,统计每个字符的总出现次数
  2. 再次遍历原字符串,按字符首次出现的顺序收集结果,避免重复输出同一字符
  3. 拼接每个字符的次数与字符本身,得到最终编码

修正后的代码(使用标准库)

from collections import Counter

def encode_string(s):
    if not s:
        return ""
    
    # 统计每个字符的总出现次数,Python3.7+的Counter会保留字符首次出现顺序
    char_total = Counter(s)
    # 按原字符串顺序去重并生成结果
    seen = set()
    encoded_parts = []
    for char in s:
        if char not in seen:
            encoded_parts.append(f"{char_total[char]}{char}")
            seen.add(char)
    return ''.join(encoded_parts)

input_string = 'aaabbabccd'
encoded_output = encode_string(input_string)
print(encoded_output)  # 输出: 4a3b2c1d

手动统计实现(不依赖标准库)

如果不想使用collections模块,可以手动完成统计:

def encode_string(s):
    if not s:
        return ""
    
    # 手动统计每个字符的总次数
    char_total = {}
    for char in s:
        char_total[char] = char_total.get(char, 0) + 1
    
    # 按首次出现顺序生成编码
    seen = set()
    encoded_parts = []
    for char in s:
        if char not in seen:
            encoded_parts.append(f"{char_total[char]}{char}")
            seen.add(char)
    return ''.join(encoded_parts)
原代码的小问题

另外原代码存在一个语法错误:encode string = "" 变量名不能包含空格,应改为encoded_string = "",不过这不是导致结果不符的核心原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 07:37:29