這是對this response和用戶發佈的僞代碼算法的後續問題。由於年齡的原因,我沒有評論這個問題。我只想驗證一個字符串是否可以分解成單詞。該算法不需要實際分割字符串。這是來自鏈接問題的響應:檢查分詞是否可能
設S [1..length(w)]是一個帶有布爾條目的表。如果 單詞w [1..i]可以拆分,S [i]爲真。然後設置S [1] = isWord(w [1])並且對於 i = 2到長度(w)計算
S [i] =(isWord [w [1..i] or for any j in {2..i}: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
是一個函數,它只是查看列表中給定的單詞。我還沒有實現它作爲一個trie。
更新:更新代碼以包含建議的更改後,它不起作用。這是更新的代碼:
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
這兩個這些。
你有沒有得到這個工作? – thinkdevcode 2012-08-14 07:01:29
@thinkdevcode是的。看到我對[接受的答案](http://stackoverflow.com/a/10274435/869912)的評論。 – 2012-08-14 10:40:59