Python游程解码(Run Length Decoding)函数多位数重复次数处理失效的修复咨询
修复游程解码函数处理多位数重复次数的问题
你的问题很典型——原函数只处理了单个数字的重复次数,遇到多位数时只会取紧接字母后的第一个数字,所以C11只会被解析成重复1次。下面是在保留核心逻辑、不依赖第三方库的前提下的修复方案:
修复后的代码
def run_length_decoding(compressed_seq): seq = '' i = 0 while i < len(compressed_seq): # 定位到当前的字母字符 if compressed_seq[i].isalpha(): current_char = compressed_seq[i] i += 1 # 收集所有连续的数字字符,拼接成完整的次数字符串 count_str = '' while i < len(compressed_seq) and compressed_seq[i].isdigit(): count_str += compressed_seq[i] i += 1 # 将次数转为整数,重复字符并追加到结果中 seq += current_char * int(count_str) else: # 跳过非字母非数字的异常字符(可根据需求调整处理逻辑) i += 1 return seq print(run_length_decoding('A2B3C11')) # 输出: AABBBCCCCCCCCCCC
思路说明
- 把原有的
for循环改成while循环,这样能灵活控制索引的移动,方便我们连续收集多位数的数字 - 遇到字母时,先记录该字符,然后向后遍历所有连续的数字字符,拼接成完整的次数字符串(比如把
11完整收集,而不是只取第一个1) - 用
字符 * 次数的方式代替原代码的内层循环,既简洁又高效 - 处理完一组字母和数字后,索引直接跳到下一个待处理的位置,避免重复遍历
这样修改后,不管是个位数还是多位数的重复次数都能正确解析,同时保留了原函数的核心功能逻辑。
内容的提问来源于stack exchange,提问作者Itay
相关产品推荐
相关产品推荐

