我在另一个stackoverflow问题上看到了这个伪代码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
答案 0 :(得分:0)
语法混乱,我很确定这是一个错误。它应该是:
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