140. Word Break II
2016-12-13 01:16
253 查看
看起来像backtrack。。
实际上也就是。
有一个TEST CASE令我们必须先判断String是不是可分的,从而导致我不得不把word break I的办法拿来用,正好复习下。。
这两天在准备面经,没怎么刷题。。
明天面试啦。。加油哇。。保佑出个我做过的题吧。。。
哇呀呀~ 我 生 气 啦~~
二刷。
backtrack暴力搜索= =
一个String能拆得是这样。。
0-i的左边得是一个单词,i-n的右边得能拆= = 能拆i-n继续下一层.
能不能拆的判断需要139的解法。
Time:
能不能拆算是O(2^n) 后面得这样算。。
T(n) = T(n-1) + T(n-2) + ... + T(0)
T(n-1) = T(n-2) + T(n-3) + ... + T(0)
T(n) = 2T(n-1) = 4T(n-2) ... (2^n)T(1)
T(1) = O(2^n)..so
so..Time compexity : O(2^n)?
139我可以确定是O(2^n),这个肯定比那个大= =
实际上也就是。
有一个TEST CASE令我们必须先判断String是不是可分的,从而导致我不得不把word break I的办法拿来用,正好复习下。。
public class Solution { public List<String> wordBreak(String s, Set<String> wordDict) { List<String> res = new ArrayList<String>(); if (s.length() == 0) return res; if (!isBreakable(s, wordDict)) return res; helper(s, wordDict, new String(), res); return res; } public void helper(String s, Set<String> wordDict, String tempStr, List<String> res) { if (s.length() == 0) { res.add(new String(tempStr.trim())); return; } else { for (int i = 1; i <= s.length(); i++) { if (wordDict.contains(s.substring(0,i)) && isBreakable(s.substring(i), wordDict)) { helper(s.substring(i), wordDict, tempStr + " " + s.substring(0,i), res); } } return; } } public boolean isBreakable(String s, Set<String> wordDict) { if (s.length() == 0) return true; boolean[] dp = new boolean[s.length()+1]; dp[0] = true; for (int i = 0; i <= s.length(); i++) { for (int j = 0; j < i; j++) { if (dp[j] && wordDict.contains(s.substring(j,i))) { dp[i] = true; break; } } } return dp[s.length()]; } }
这两天在准备面经,没怎么刷题。。
明天面试啦。。加油哇。。保佑出个我做过的题吧。。。
哇呀呀~ 我 生 气 啦~~
二刷。
backtrack暴力搜索= =
一个String能拆得是这样。。
0-i的左边得是一个单词,i-n的右边得能拆= = 能拆i-n继续下一层.
能不能拆的判断需要139的解法。
Time:
能不能拆算是O(2^n) 后面得这样算。。
T(n) = T(n-1) + T(n-2) + ... + T(0)
T(n-1) = T(n-2) + T(n-3) + ... + T(0)
T(n) = 2T(n-1) = 4T(n-2) ... (2^n)T(1)
T(1) = O(2^n)..so
so..Time compexity : O(2^n)?
139我可以确定是O(2^n),这个肯定比那个大= =
public class Solution { public List<String> wordBreak(String s, Set<String> wordDict) { List<String> res = new ArrayList<>(); if (!isBreakable(s, wordDict)) { return res; } dfs(res, s, wordDict, new StringBuilder()); return res; } public void dfs(List<String> res, String s, Set<String> set, StringBuilder sb) { if (s.length() == 0) { res.add(sb.toString().trim()); return; } else { int len = sb.length(); for (int i = 1; i <= s.length(); i++) { if (set.contains(s.substring(0,i)) && isBreakable(s.substring(i), set)) { sb.append(s.substring(0, i) + " "); dfs(res, s.substring(i), set, sb); sb.setLength(len); } } } } public boolean isBreakable(String s, Set<String> set) { if (s.length() == 0) return true; boolean[] dp = new boolean[s.length() + 1]; dp[0] = true; for (int i = 1; i <= s.length(); i++) { for (int j = 0; j < i; j++) { if (dp[j] && set.contains(s.substring(j, i))) { dp[i] = true; break; } } } return dp[s.length()]; } }
相关文章推荐
- leetcode-140-Word Break II
- 【LeetCode】140. Word Break II
- 140. Word Break II
- [leetcode] 140.Word Break II
- Leetcode 140 Word Break II
- LeetCode 140. Word Break II
- LeetCode 140. Word Break II (DP+DFS)
- [leetcode] 140. Word Break II 解题报告
- leetcode 140:Word Break II 采用很巧妙的动态规划和DFS联合使用 JAVA源代码实现
- 140. Word Break II
- 140. Word Break II(dp,字典匹配,并输出所有匹配结果,即保存dp路径)(继续理解,重刷)
- [leetcode]140. Word Break II(Java)
- leetcode[140] Word Break II
- LeetCode 140 Word Break II (DFS 分词方法 推荐)
- 140. Word Break II
- [LeetCode] 140. Word Break II 单词拆分II
- LeetCode: Word Break II [140]
- LeetCode 140. Word Break II
- 140. Word Break II(hard)
- Leetcode 140. Word Break II