[leetcode-139]Word Break(java)
2015-08-16 17:29
501 查看
问题描述:
Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.
For example, given
s = “leetcode”,
dict = [“leet”, “code”].
Return true because “leetcode” can be segmented as “leet code”.
分析:这种问题已经出现了很多次了,本质上就是要求把大问题切割为小问题,虽然表面上切割为小问题再归纳为大问题好像多此一举,但实际上这样能省很多时间。
最开始使用递归的思想,结果TLE,最后改成了DP算法,顺利AC,
代码如下:304ms
递归版本:TLE
Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.
For example, given
s = “leetcode”,
dict = [“leet”, “code”].
Return true because “leetcode” can be segmented as “leet code”.
分析:这种问题已经出现了很多次了,本质上就是要求把大问题切割为小问题,虽然表面上切割为小问题再归纳为大问题好像多此一举,但实际上这样能省很多时间。
最开始使用递归的思想,结果TLE,最后改成了DP算法,顺利AC,
代码如下:304ms
[code]public class Solution { public boolean wordBreak(String s,Set<String> wordDict){ int length = s.length(); boolean[] words = new boolean[length]; for(int i = 1;i<=length;i++){ int j; for(j = 0;j<i;j++){ String substr = s.substring(j,i); if(wordDict.contains(substr) && (j==0 || words[j-1])) { words[i-1] = true; break; } } if(j == i) words[i-1] = false; } return words[length-1]; } }
递归版本:TLE
[code]public boolean wordBreak(String s, Set<String> wordDict) { if(s.length()==0) return false; if(wordDict.contains(s)) return true; for(int i = 1;i<=s.length();i++){ String substring = s.substring(0,i); if(wordDict.contains(substring) && wordBreak(s.substring(i),wordDict)) return true; } return false; }
相关文章推荐
- (2)java堆内存
- Eclipse - JDK内存配置- 环境配置
- Java流式IO
- Java基础—super和this关键字
- Spring事务传播特性实例解析
- java初始化顺序
- Java功底篇系列-03-一些位运算符你会如何理解?
- Java虚拟机详解02----JVM内存结构
- hdu1276 Java水果
- 记票统计(java版整理)
- Java IO (上)
- Spring(Struts、Hibernate优势 + Spring IOC、AOP + Spring实际开发过程)
- (1)java虚拟机概念和结构图
- 2015年华为提前招聘机试题--奇偶排序
- java 对新浪微博微博的发表时间解析
- Java parseInt_使用此方法得到的原始数据类型的一个特定的字符串
- Spring Web Flow 学习笔记(2)-流程的组件
- HW-IP合法性_Java
- Java学习学习之路0801<复习>(抽象类、日期Date、接口)
- 2015年华为提前招聘机试题--输出最大的三位数