字符串按字符总出现次数编码问题求助:代码输出不符预期
问题分析
你的代码实现的是连续字符游程编码(统计相邻重复字符的次数),但需求是统计每个字符在整个字符串中的总出现次数,逻辑方向完全错误,所以结果和预期不符。
修正方案
要实现全局字符计数编码,核心是先统计每个字符在字符串中的总出现次数,再按字符在原字符串中的首次出现顺序去重输出,具体步骤如下:
- 遍历字符串,统计每个字符的总出现次数
- 再次遍历原字符串,按字符首次出现的顺序收集结果,避免重复输出同一字符
- 拼接每个字符的次数与字符本身,得到最终编码
修正后的代码(使用标准库)
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
相关产品推荐
相关产品推荐

