これは、この応答と、ユーザーが投稿した疑似コード アルゴリズムに対するフォローアップの質問です。その質問については、年齢のためにコメントしませんでした。文字列を単語に分割できるかどうかを検証することにのみ関心があります。アルゴリズムは実際に文字列を分割する必要はありません。これは、リンクされた質問からの応答です。
S[1..length(w)] をブール エントリを持つテーブルとします。単語 w[1..i] を分割できる場合、S[i] は true です。次に、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
関連する質問が 2 つあります。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
これらの両方に対して返されるはずです。