不确定这个伪代码在说什么

Not sure what this pseudo-code is saying

我在此处发现的另一个 Whosebug 问题上看到了这个伪代码 Split a string to a string of valid words using Dynamic Programming

这道题是一道动态规划题,看输入的字符串是否可以从字典中拆分成单词。

第三行,意思是将大小为[N+1]的数组b设置为全假值?我很确定这一点。但我真正不确定的是第五行。那是for循环还是什么?我觉得伪代码说 'for i in range' 只会有 2 个值。那句话在说什么?

def try_to_split(doc):
   N = len(doc)
   b = [False] * (N + 1)
   b[N] = True
   for i in range(N - 1, -1, -1):
      for word starting at position i:
         if b[i + len(word)]:
            b[i] = True
            break
   return b

它的语法令人困惑,我很确定其中有一个错误。应该是:

for i in range(N - 1, 0, -1) //0, not -1

我认为这意味着

for i from (N - 1) downto 0 //-1 was the step, like i-- or i -= 1

这对算法来说很有意义,因为它只是从字符串的末尾开始,并求解每个尾随的子字符串,直到它到达开头。如果 b[0] 最后是 true,那么输入的字符串可以从字典中拆分成单词。 for word starting at position i 只是检查字典中的所有单词,看看它们是否从那个位置开始。

如果想重构解决方案,可以将 b 更改为 int 数组,初始化为 0,然后将 if 更改为:

if b[i + len(word)] != 0
    b[i] = i + len(word) //len(word) works too
    break