python - python中带记忆的动态编程
问题描述
我正在尝试编写一个代码来检查一个单词是否可以“分解”成某个列表中的单词组合。例如,如果我的输入是:
word = 'strawberryfield'
list = ['straw', 'berry', 'field']
然后程序应该返回True
。
我设法编写的代码是:
class Solution(object):
def wordBreakInner(self, s, wordDict, memo):
# print("entered with: ", s)
if s in memo:
return memo[s]
if len(s) == 0 or s in wordDict:
memo.append(s)
return True
for i in range(len(s)):
if s[0:i:1] in wordDict:
# print("found this word in dict: ", s[0:i:1])
if s[i:] in memo:
return true
else:
if self.wordBreakInner(s[i:], wordDict, memo):
memo.append(s)
return True
return False
def wordBreak(self, s, wordDict):
"""
:type s: str
:type wordDict: List[str]
:rtype: bool
"""
return self.wordBreakInner(s, wordDict, [])
它似乎有效,但无法处理长输入。这就是为什么我尝试添加记忆处理(不确定我是否做得很好)。对于以下输入,程序时间限制超过:
word = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab'
['a', 'aa', 'aaa', 'aaaa', 'aaaaa', 'aaaaaa', 'aaaaaaa', 'aaaaaaaa', 'aaaaaaaaa', 'aaaaaaaaaa']
有人可以解释我做错了什么吗?我很确定它与记忆有关,但我不知道为什么。
解决方案
推荐阅读
- json - 选择字典中具有相同键的所有值
- compiler-construction - 在没有关联性声明的情况下解决 Bison 中的悬空 if、elsif 和 else
- bitmap - 以编程方式截取屏幕截图时,Cardview 失去其半径
- wordpress - 如何通过一些元键设置帖子标签?
- matlab - 将数据从 MATLAB 实时发送到处理?
- regex - GCP - DLP - 正则表达式
- c++ - 如何判断用户是否已经评价了我的 UWP 应用?
- generics - 如何在 cl-defmethod 中添加新的专门工具,以应用于多个主要模式?
- javascript - 如何根据状态变化重新渲染组件
- angular - Firebase/Angular:未找到身份验证用户