Java for LeetCode 139 Word Break
2015-06-04 10:41
471 查看
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 =
dict =
Return true because
解题思路一:
直接暴力枚举会导致TLE,因此,需要记录之前的结果,即可以采用dp的思路,JAVA实现如下:
解题思路二:
考虑到下题用dp做不出来,暴力枚举肯定TLE,所以可以设置一个unmatch集合来存储s中已经确定无法匹配的子串,从而避免重复检查,JAVA实现如下:
For example, given
s =
"leetcode",
dict =
["leet", "code"].
Return true because
"leetcode"can be segmented as
"leet code".
解题思路一:
直接暴力枚举会导致TLE,因此,需要记录之前的结果,即可以采用dp的思路,JAVA实现如下:
static public boolean wordBreak(String s, Set<String> wordDict) { boolean[] dp = new boolean[s.length() + 1]; dp[0] = true; for (int i = 1; i < dp.length; i++) for (int j = i; j >= 0 && !dp[i]; j--) if (wordDict.contains(s.substring(i - j, i))) dp[i] = dp[i - j]; return dp[dp.length - 1]; }
解题思路二:
考虑到下题用dp做不出来,暴力枚举肯定TLE,所以可以设置一个unmatch集合来存储s中已经确定无法匹配的子串,从而避免重复检查,JAVA实现如下:
static public boolean wordBreak(String s, Set<String> dict) { return wordBreak(s, dict, new HashSet<String>()); } static public boolean wordBreak(String s, Set<String> dict, Set<String> unmatch) { for (String prefix : dict) { if (s.equals(prefix)) return true; else if (s.startsWith(prefix)) { String suffix = s.substring(prefix.length()); if (!unmatch.contains(suffix)) { if (wordBreak(suffix, dict, unmatch)) return true; else unmatch.add(suffix); } } } return false; }
相关文章推荐
- ca-bundle.crt to java truststore(e.g. trustStore.jks)
- java socket 通信实例
- Java的HashMap和HashTable
- java过滤特殊字符串
- eclipse 配置JDK
- spring下PropertyPlaceholderConfigurer的使用
- jdk 不同版本的安装及 环境变量的设置
- SVN使用教程之-分支/标记 合并 subeclipse
- Java向前引用容易出错的地方
- Spring学习笔记(一)第一个Spring程序
- JAVA字符串转日期或日期转字符串
- windows下eclipse非插件连接Hadoop集群
- Java设计模式之策略
- 推荐2个在Java编码过程好用的工具
- JAVA实现冒泡排序
- 在spring中配置mybatis 中自定义的拦截器插件
- 关于JAVA的接口与抽象
- Eclipse中自动提示的参数变成arg0,arg1的解决办法
- 安卓项目中的R.java文件丢失如何解决
- JAVA 解析excel兼容03 和07