[Leetcode][python]Word Break/Word Break II
来源:互联网 发布:plsql编程入门 编辑:程序博客网 时间:2024/06/05 20:48
Word Break
题目大意
给定一个目标字符串和一组字符串,判断目标字符串能否拆分成数个字符串,这些字符串都在给定的那组字符串中。
解题思路
动态规划
代码
class Solution(object): def wordBreak(self, s, wordDict): """ :type s: str :type wordDict: List[str] :rtype: bool """ n = len(s) dp = [False] * (n + 1) dp[0] = True for i in range(n): for j in range(i, -1, -1): # print j, i, s[j:i + 1] if dp[j] and s[j:i + 1] in wordDict: dp[i + 1] = True break return dp[n]
Word Break II
题目大意
给定一个目标字符串和一组单词,将目标字符串进行拆分,要求拆分出的部分在那个单词组中,拆分后的单词用空格隔开,给出所有可能的拆分情况。
解题思路
动态规划+深度优先
参考:http://www.cnblogs.com/zuoyuan/p/3760804.html
这道题不只像word break那样判断是否可以分割,而且要找到所有的分割方式,那么我们就要考虑dfs了。不过直接用dfs解题是不行的,为什么?因为决策树太大,如果全部遍历一遍,时间复杂度太高,无法通过oj。那么我们需要剪枝,如何来剪枝呢?使用word break题中的动态规划的结果,在dfs之前,先判定字符串是否可以被分割,如果不能被分割,直接跳过这一枝。实际上这道题是dp+dfs。
代码
class Solution(object): def wordBreak(self, s, wordDict): """ :type s: str :type wordDict: List[str] :rtype: List[str] """ Solution.res = [] self.dfs(s, wordDict, '') return Solution.res def dfs(self, s, wordDict, stringlist): if self.check(s, wordDict): if len(s) == 0: Solution.res.append(stringlist[1:]) for i in range(1, len(s)+1): if s[:i] in wordDict: # print stringlist+' '+s[:i] self.dfs(s[i:], wordDict, stringlist+' '+s[:i]) def check(self, s, wordDict): dp = [False for i in range(len(s)+1)] dp[0] = True for i in range(len(s)): for j in range(i, -1, -1): if dp[j] and s[j:i + 1] in wordDict: dp[i + 1] = True break return dp[len(s)]
总结
阅读全文
0 0
- [Leetcode][python]Word Break/Word Break II
- [leetcode]Word Break II
- LeetCode:Word Break II
- Leetcode: Word Break II
- [LeetCode] Word Break II
- [LeetCode]Word Break II
- LeetCode | Word Break II
- [LeetCode] - Word Break II
- LeetCode - Word Break II
- Leetcode Word Break II
- [LeetCode] Word Break II
- Word Break II -- LeetCode
- LeetCode (Word Break II )
- Leetcode--Word Break II
- Leetcode: Word Break II
- LeetCode Word Break II
- Word Break II leetcode
- [leetcode]Word Break II
- MVP+Retrofit+RxJava(Flowable)结合使用
- Algorithm之路二:Add Two Numbers
- Google 亚马逊又双叒叕打架了!用户:我只想安静地用产品
- 黑客入侵监狱系统放囚犯,换来十年监禁、25 万美元罚款
- 程序员除了编代码,还能做哪些职业规划?
- [Leetcode][python]Word Break/Word Break II
- Pig编程指南--第5章 Pig Latin介绍
- C++ 17 标准正式发布:终于能更简单地编写和维护代码了!
- AI 专业人才缺口上百万,年薪 80 万远超同行
- Blog26@linux网络端口安全下_iptables
- “不限量”只是幌子!流量卡到底哪家最划算?
- FusionCharts 固定饼图半径,适用于一个页面两个以上饼图的
- Canvas 入门5 在Canvas中使用HTML元素
- 八大排序算法的python实现