dp 专题:1 Word Break I II
来源:互联网 发布:细雪哪个译本好 知乎 编辑:程序博客网 时间:2024/06/15 18:29
Word Break I
参考代码
http://needjobasap.blogspot.com/2014/11/word-break-leetcode.html
http://fisherlei.blogspot.com/2013/11/leetcode-word-break-solution.html
"
possible[i] = true if S[0,i]在dictionary里面
= true if possible[k] == true 并且 S[k+1,j]在dictionary里面, 0<k<i
= false if no such k exist.
"public class Solution {
// http://needjobasap.blogspot.com/2014/11/word-break-leetcode.html
//http://fisherlei.blogspot.com/2013/11/leetcode-word-break-solution.html
public boolean wordBreak(String s, Set<String> dict) {
boolean[] dp = new boolean[s.length()+1];
dp[0] = true;
// for(int i=0;i<s.length();i++){ 注意这里
for(int i=1;i<=s.length();i++){
for(int j=0; j< i; j++){
if(dp[j] && dict.contains(s.substring(j,i))) {
dp[i]=true;
break;
}
}
}
return dp[s.length()];
}
}
Word Break II
http://www.danielbit.com/blog/puzzle/leetcode/leetcode-word-break-ii
总结的比较好的算法
public class Solution {
// https://stupidcodergoodluck.wordpress.com/2013/11/16/leetcode-word-break-ii/
public ArrayList<String> wordBreak(String s, Set<String> dict) {
ArrayList<String> ret = new ArrayList<String>();
if (s==null || s.length()==0) return ret;
int n = s.length();
boolean[] dp = new boolean[n+1];
dp[0] = true;
for(int i=1;i<=s.length();i++){
for(int j=0; j< i; j++){
if(dp[j] && dict.contains(s.substring(j,i))) {
dp[i]=true;
break; // dp[i] = true了,则j to i 的dp就不用再接着判断了
}
}
}
if (dp[n] == false) return ret; //DP的作用就这一行!!!
StringBuilder cur = new StringBuilder();
dfs(s, 0, cur, ret, dict);
return ret;
}
public void dfs(String s, int start, StringBuilder cur, ArrayList<String> ret, Set<String> dict) {
int n = s.length();
if (start >= n) {
ret.add(new String(cur)); //该时空完成 收集结果
return;
}
for (int i=start+1; i<=n; i++) { // start+1 为啥,因为下一行从start到i
String sub = s.substring(start, i); //每个时空之内起点都是一样的,start
if (dict.contains(sub)) {
int oldLen = cur.length();
if (oldLen!=0) cur.append(" ");
cur.append(sub);
dfs(s, i, cur, ret, dict); //平行时空发射,各自带着不一样的start = i
cur.delete(oldLen, cur.length()); // 本时空内改变历史复原,只是在dfs 中才update了传入的cur
}
}
}
}
- dp 专题:1 Word Break I II
- leetCode: Word Break I & Word Break II
- Word Break I,II, Triangle,Palindrome Partitioning 动态规划 DP
- 【LeetCode】word break I && II
- leetcode word break I && II
- 140. Word Break II(dp)
- leetcode Word Break I II 算法分析
- LeetCode题解:Word Break I and II
- leetcode day7 -- Word Break I II
- Sudoku Solver & Word Break I && *II
- 总结一下Word Break I 和 II
- leetcode -- Word Break I & II -- 重点
- Leetcode 139. Word Break I&&II
- LeetCode:Word Break II(DP)
- LeetCode 140. Word Break II (DP+DFS)
- [leetcode][DP][回溯] Word Break II
- [leetcode][DP][回溯] Word Break II
- LeetCode Word Break II DP+DFS
- [leetcode] Container with most water
- 9.10 叠箱子,不是很理解,建议做几道dp的leetcode题目
- 程序员最应该知道的20件事
- 9.10 叠箱子 ,建议看leetcode dp部分
- Arduino入门很简单
- dp 专题:1 Word Break I II
- LeetCode-Word Search
- ESQL之事务
- 究竟到哪里寻找OpenGL3.X开发库!!!
- * Subsets - Leetcode
- LeetCode 题解(71): Palindrome Number
- C#设计模式(八)组合模式
- 25款实用的桌面版博客编辑器
- Advanced Installer 11.0实战教程