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低得多,但在某些情况下,你不会超过它。 –