编辑:看来,这不仅仅是一个一次性的错误。
在以下简单算法中,我遇到了一个错误,该算法应该显示沿run-length encoding
行的字符串中的字母数。
我可以看到为什么不将最后一个字符添加到结果字符串中,但是如果我增加range
中的i
则得到index out of range
的原因显而易见。
我想从算法设计的角度来了解概念上的问题,以及使我的代码正常工作。
我需要一些特殊情况的代码来处理原始字符串中的最后一项吗?还是将当前字符与previous
字符进行比较也许更有意义,尽管这在算法开始时就产生了问题?
是否有一种通用的方法来将当前元素与上一个/下一个元素进行比较,从而避免索引超出范围的问题?
def encode(text):
# stores output string
encoding = ""
i = 0
while i < len(text) - 1:
# count occurrences of character at index i
count = 1
while text[i] == text[i + 1]:
count += 1
i += 1
# append current character and its count to the result
encoding += text[i] + str(count)
i += 1
return encoding
text = "Hello World"
print(encode(text))
# Gives H1e1l2o1 1W1o1r1l1