Python中的Word Break II
为了解决这个问题,我们将遵循以下步骤-
创建一个映射备忘录
定义一个名为Solve的方法,它将使用字符串和wordDict
如果s为null,则返回空列表
如果在备忘录中,则-
返回备忘录
创建一个数组ret
对于范围1到s的i
对于solve中的j(从i到s的子字符串,wordDict)
p:=s的子串,从索引0到i–1,由空格和j连接,然后从左右清除多余的空间-
将p插入ret
如果在wordDict中存在从索引0到i–1的s的子字符串,则
备忘:=ret
返回备忘录
示例
让我们看下面的实现以更好地理解-
class Solution(object): def wordBreak(self, s, wordDict): self.memo = {} wordDict = set(wordDict) return self.solve(s,wordDict) def solve(self,s, wordDict): if not s: return [''] if s in self.memo: return self.memo[s] ret = [] for i in range(1,len(s)+1): if s[:i] in wordDict: for j in self.solve(s[i:],wordDict): ret.append((s[:i] + " " + j).strip()) self.memo[s] = ret return self.memo[s] ob = Solution()print(ob.wordBreak("appleraincoat",["app","apple","rain","coat","rain coat"]))
输入值
"appleraincoat" ["app","apple","rain","coat","raincoat"]
输出结果
['apple rain coat', 'apple raincoat']