【发布时间】:2020-02-29 23:04:15
【问题描述】:
编辑:这似乎不仅仅是一个错误的错误。
我在以下简单算法中遇到了一个错误,该算法应该显示字符串中的字母计数,沿着run-length encoding 的行。
我可以看到为什么最后一个字符没有添加到结果字符串中,但是如果我增加i 的range,我会得到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
【问题讨论】:
-
您对外循环和内循环使用相同的计数器 (
pos) - 这是一个非常糟糕的主意,特别是因为外循环是for in range循环。如果您改用while循环,可能会起作用。 -
另外,你为什么要在外循环结束时增加
pos? -
因为我把外循环从
while改成了for。我现在要编辑...
标签: python algorithm off-by-one