这是对此响应和用户发布的伪代码算法的后续问题。由于它的年龄,我没有对这个问题发表评论。我只对验证字符串是否可以拆分为单词感兴趣。该算法不需要实际拆分字符串。这是来自链接问题的回复:
让 S[1..length(w)] 是一个带有布尔条目的表。如果单词 w[1..i] 可以拆分,则 S[i] 为真。然后设置 S[1] = isWord(w[1]) 并为 i=2 到 length(w) 计算
S[i] = (isWord[w[1..i] 或 {2..i} 中的任何 j:S[j-1] 和 isWord[j..i])。
我正在将此算法翻译成简单的 python 代码,但我不确定我是否正确理解它。代码:
def is_all_words(a_string, dictionary)):
str_len = len(a_string)
S = [False] * str_len
S[0] = is_word(a_string[0], dictionary)
for i in range(1, str_len):
check = is_word(a_string[0:i], dictionary)
if (check):
S[i] = check
else:
for j in range(1, str_len):
check = (S[j - 1] and is_word(a_string[j:i]), dictionary)
if (check):
S[i] == True
break
return S
我有两个相关的问题。1)这段代码是否将链接算法正确翻译成Python,如果是,2)现在我有S,我如何用它来判断字符串是否只由单词组成?在这种情况下,is_word
是一个简单地在列表中查找给定单词的函数。我还没有实现它作为一个尝试。
更新:更新代码以包含建议的更改后,它不起作用。这是更新的代码:
def is_all_words(a_string, dictionary)):
str_len = len(a_string)
S = [False] * str_len
S[0] = is_word(a_string[0], dictionary)
for i in range(1, str_len):
check = is_word(a_string[0:i], dictionary)
if (check):
S[i] = check
else:
for j in range(1, i): #THIS LINE WAS UPDATED
check = (S[j - 1] and is_word(a_string[j:i]), dictionary)
if (check):
S[i] == True
break
return S
a_string = "carrotforever"
S = is_all_words(a_string, dictionary)
print(S[len(S) - 1]) #prints FALSE
a_string = "hello"
S = is_all_words(a_string, dictionary)
print(S[len(S) - 1]) #prints TRUE
它应该返回True
这两个。