This problemこれは単純に言い換えれば、与えられた文字列からなるすべての組み合わせが結合して繰り返しの有無にかかわらずターゲット文字列を形成することができます。再帰によるハッカークランクパスワードクラッカーのタイムアウト
文字列:私たちは、私たちがしなければならないん我々は
ターゲットことができるので:
wedowhatwemustbecausewecan出力を:我々は、我々は私が撮った
アプローチをしていることができなければならないので、何をすべきかターゲットが空になるまでターゲットから長い単語をすべて削除します。ターゲットが空になると、出力が返されます。長い単語が解決策につながっていない場合は、短い単語などで試してください。私はまた、ターゲットが既に試されている場合には、memoizationを使ってバックトラッキングと同じように戻ってくることを確認するためにメモを使用しています。
このアプリケーションは、2を除くすべてのテストケースに合格しました。ここで、タイムアウトが発生しています。
def recursions(word_map, paswd, output, remember):
flag = 0
if len(paswd) == 0:
return 1
if paswd in remember:
return flag
for char in paswd:
for word in (word_map[char] if char in word_map else []):
if paswd.startswith(word):
output.append(word + " ")
if recursions(word_map, paswd[len(word):], output, remember):
return 1
output.pop()
remember[paswd] = 1
return flag
ヒントを提供するには助けてください。完全な解決策はhereです。
問題はありません再帰が深すぎる場合。しかし、stackoverflowの問題をデバッグするには、特定の問題とその問題の再現が必要です。 –
pypyに切り替えてみてください。 pypyのタイムアウトはPythonの場合よりもはるかに低いですが、それを超えない場合もあります。 –