关于字符Run Length Encoding代码的调试请求:输入"aaabba"时输出缺失末尾字符统计项
问题分析与修复方案
你的问题出在外层循环的终止条件上,导致最后一个单独的字符完全没被处理。我们来一步步拆解问题根源:
原代码的执行漏洞(以输入"aaabba"为例)
输入字符串长度n=6,初始i=0:
- 第一个内层循环处理连续的
aaa:count累加至3,i最终变为2;随后i +=1变成3。 - 第二个内层循环处理连续的
bb:count累加至2,i最终变为4;随后i +=1变成5。 - 此时外层循环条件是
i < n-1(也就是5 <5),条件不成立,循环直接终止——最后一个索引为5的字符a完全没进入处理逻辑,所以输出少了a1。
修复方案(基于原有代码的最小改动)
把外层循环的终止条件从i < n-1改为i < n,同时调整输出逻辑的顺序,确保每个字符(包括最后一个)都能被输出:
st = "aaabba" n = len(st) i = 0 while i < n: # 改为i < n,覆盖所有字符索引 count = 1 # 内层循环仅在不是最后一个字符且当前字符与下一个相同时执行 while (i < n-1 and st[i] == st[i+1]): count += 1 i += 1 # 先输出当前字符的统计结果 print(st[i] + str(count), end="") i += 1 # 再移动到下一个字符
修复后执行流程
当i=5时,外层循环条件5 <6成立:
count初始化为1,内层循环条件5 <5不成立,直接跳过内层循环;- 输出
st[5] + str(1)也就是a1; - 最后
i +=1变成6,外层循环终止,最终输出a3b2a1,完全符合预期。
如果追求更Pythonic的写法,也可以用itertools.groupby来简化逻辑,但上面的修改是在你原有代码基础上的最小调整,最容易理解和维护。
内容的提问来源于stack exchange,提问作者Suriya Ganesh
相关产品推荐
相关产品推荐

