leetcode140. Word Break II
Posted seyjs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode140. Word Break II相关的知识,希望对你有一定的参考价值。
题目如下:
解题思路:巨坑的一个题目。一般来说,leetcode这一类题目分为两种形式,一种是问能不能分割/有几种分割的方法,一种是列出所有分割的集合。本题是第二种,但是有一些特别坑的用例,其结果是无法分割,又非常容易超时。因此解题方法需要先判断能不能分割,能的话再计算怎么分割。首先看能不能分割:可以采用动态规划的方法。记dp[i] = 0表示s[0:i]区间不能分割,dp[i] = 1表示可以,我们可以得出这样的递推表达式,dp[i] = dp[j] if dp[j] == 1 and s[j+1:i+1] in wordDict,这样能很容易判断出s是否可以被分割;接下来是找出所有分割的集合,同样用动态规划的方法,记dp[i]表示s[0:i]区间所有分割的集合,那么有:dp[i] = dp[j] * s[j+1:i+1] if len(dp[j]) > 0 and s[j+1:i+1] in wordDict。
代码如下:
class Solution(object): def wordBreak(self, s, wordDict): dic = {} dp = [0] * len(s) for i in wordDict: dic[i] = 1 for i in range(len(s)): if s[:i+1] in dic: dp[i] = 1 continue for j in range(i+1): if dp[j] > 0 and s[j+1:i+1] in dic: dp[i] = 1 break if dp[-1] == 0: return [] dp = [[] for i in s] for i in range(len(s)): if s[:i+1] in dic: dp[i].append(s[:i+1]) for j in range(i+1): if len(dp[j]) > 0 and s[j+1:i+1] in dic: for k in dp[j]: length = len(k.replace(\' \',\'\')) dp[i].append(k + \' \' + s[length:i+1]) return dp[-1]
以上是关于leetcode140. Word Break II的主要内容,如果未能解决你的问题,请参考以下文章
leetcode 140. Word Break II ----- java
[LeetCode] 140. Word Break II java
leetcode 140 word break II 单词拆分2