This problem只是重申hackerrank密碼破解超時是這樣的:給定一串字符串和目標字符串,什麼從給定字符串的所有組合可以結合在一起,以形成目標字符串和不重複的。由於遞歸
例如
串:我們做什麼,我們一定要,因爲我們可以
目標:wedowhatwemustbecausewecan
輸出:我們做什麼,我們必須,因爲我們可以
方法我帶是從目標中刪除每個更長的單詞,直到目標變爲空。如果目標變爲空,那麼只需返回輸出。如果更長的單詞不會導致解決方案,那麼嘗試使用更短的單詞等。我也使用memoization來確保如果目標已經嘗試過,那麼只需返回,就像使用memoization進行回溯一樣。
這apporach通過了所有的測試用例,除了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低得多,但在某些情況下,你不會超過它。 –