博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Word Break II
阅读量:5054 次
发布时间:2019-06-12

本文共 1356 字,大约阅读时间需要 4 分钟。

本题跟一般DFS不同的是,需要先利用Word Break I 的结果来判断是否能Break,如果不能break,直接裸上DFS,会超时。check 完是否能Break之后就跟一般DFS 一样了。(一般来说,如果不check且不能break,DFS在忙活一阵之后会返回一个空List,但OJ贱贱的有一个很大且不能break的test case,而据我猜测,能break的case都相对比较小,妈蛋!所以OJ用这种很贱的方式来强迫你先check,再DFS)。
 

public class Solution {

public List<String> wordBreak(String s, Set<String> dict) {
List<String> result = new ArrayList<String>();
StringBuilder sb = new StringBuilder();
if(canBreak(s, dict)) dfs(s, 0, dict, sb, result);
return result;
}
public boolean canBreak(String s, Set<String> dict) {
if(s == null || s.length() == 0) return true;
int len = s.length();
boolean[] dp = new boolean[len + 1];
dp[0] = true;
for(int i = 0; i < len; i++) {
for(int j = 0; j <= i; j++) {
if(dp[j] && dict.contains(s.substring(j, i + 1))) {
dp[i + 1] = true;
break;
}
}
}
return dp[len];
}
private void dfs(String s, int start, Set<String> dict, StringBuilder sb, List<String> result) {
if(start == s.length()) {
StringBuilder temp = new StringBuilder(sb); // 需要新建一个,不能在原来的sb上改。
temp.deleteCharAt(temp.length() - 1);
result.add(temp.toString());
} else {
for(int i = start; i < s.length(); i++) {
String temp = s.substring(start, i + 1);
if(dict.contains(temp)) {
sb.append(temp).append(" ");
dfs(s, i + 1, dict, sb, result);
sb.delete(sb.length() - temp.length() - 1, sb.length());
}
}
}
}
}

转载于:https://www.cnblogs.com/diyishao/p/4302364.html

你可能感兴趣的文章
以查询功能谈下,三层架构中的工厂模式与其中反射的应用
查看>>
HTML中什么时候加px
查看>>
动手动脑
查看>>
.NETCore 添加Docker支持,并上传镜像至Docker Hub,最后在CentOs中拉取镜像运行
查看>>
数据结构初步归纳(一)概念、线性表以及队列和栈
查看>>
LeetCode 513. 找树左下角的值(Find Bottom Left Tree Value)
查看>>
python接口自动化测试十二:对返回的json的简单操作
查看>>
Appium+python自动化(二十三)- 真假美猴王Monkeyrunner与Monkey傻傻的分不清楚(超详解)...
查看>>
python os module
查看>>
JS标准库和数组
查看>>
Scala学习(七)---包和引入
查看>>
day-42mysql
查看>>
jQuery点击事件绑定onClick和on()
查看>>
==和.equals()在封装类型与基本类型比较中的注意点
查看>>
[HNOI2010]合唱队 区间DP
查看>>
我的第一个python web开发框架(24)——系统重构与ORM
查看>>
Action<T> Delegate
查看>>
汉诺塔递归问题
查看>>
图片懒加载 lazyload
查看>>
将Ext JS 5应用程序导入Web项目以及实现本地化
查看>>