(已解决 7.8号)leecode 分词利用词典分词 word break
不戚戚于贫贱,不汲汲于富贵 ---五柳先生
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".
搜索--》自顶向下的动态规划(备忘录法)》自底向下动态规划
这些思想一直在使用中,今天是7.8号,看了搜索的书籍,期中讲的是利用字典分词,所以觉得这个题目值得一做。今天用了3个多小时ac了,其实我把动态规划方程搞错了。
dp[i][j] 表示 以 j开始长度为 i的字符串是否符合条件,这个事最核心的,
举个例子: “abc”
第一层循环判断 a b c 是否则集合中,
第二层 ab bc 是否在集合中
第三层 abc 是否符合条件
每一层只要利用上面一层的信息,比如 判断 abc,只要判断 (abc) , (a&&bc) ,(ab&&c) 三个是否满足条件
1.递归(搜索)
学习递归时候,老师说他的好处 是简单,其实递归的思路是暴力搜索的方法,所以写的人需要考虑的问题很少,但是栈的调用很耗时,同时可能会出现栈溢出。但是他只做自己需要干的事情,,同时他需要干的事情他会重复做。这为后面的自顶向下的优化做了铺垫。
public class Solution {
public boolean wordBreak(String s, Set<String> dict) {
if(s=="") return true;
for(int i=0;i<s.length();i++)
{
String s1=s.substring(0,i+1); //枚举所有以0为开头的的字符串
if(dict.contains(s1)&&wordBreak(s.substring(i+1),dict))
{
return true;
}
}
return false;
}
}
结果是:
Last executed input:"acaaaaabbbdbcccdcdaadcdccacbcccabbbbcdaaaaaadb", ["abbcbda","cbdaaa","b","dadaaad","dccbbbc","dccadd","ccbdbc","bbca","bacbcdd","a","bacb","cbc","adc","c","cbdbcad","cdbab","db","abbcdbd","bcb","bbdab","aa","bcadb","bacbcb","ca","dbdabdb","ccd","acbb","bdc","acbccd","d","cccdcda","dcbd","cbccacd","ac","cca","aaddc","dccac","ccdc","bbbbcda","ba","adbcadb","dca","abd","bdbb","ddadbad","badb","ab","aaaaa","acba","abbb"]
2.超时了,如何优化呢,博主在一本书上看过,是自顶向下动态规划,同学们可以查查,其实就是记住了他重复做的事情。
dp[i][j]表示两者之间是否在词典中。
dp[i][j]=dp[i][k] && dp[k+1][j] (i+1=<k<j-1)
public class Solution {
//
int dp(int i,int j,String s,Set<String> dict,int d[][]) // get the i to j is exit in the dict
{
if(d[i][j]==1) return 1;
if(d[i][j]==-1) return -1;
if(dict.contains(s.substring(i,j+1)))
{
d[i][j]=1;
return 1;
}
else
{
for(int k=i;k<j;k++)
{
if(dp(i,k,s,dict,d)==1&&dp(k+1,j,s,dict,d)==1)
{
d[i][j]=1;
return 1;
}
}
return -1;
}
}
public boolean wordBreak(String s, Set<String> dict) {
int len=s.length();
int d[][]=new int[len][len];
int ans=dp(0,len-1,s,dict,d);
if(ans==1) return true;
return false;
}
}
错了,还是超时,
3.最后的自定向下方法了,填表,那些专业人士都叫打表。(AC)
public class Solution {
public boolean wordBreak(String s, Set<String> dict) {
if(s=="") return true;
int len=s.length();
boolean dp[][]=new boolean[len][len];
//
for(int i=0;i<len;i++)
{
for(int j=0;j<len-i;j++)
{
String s2=s.substring(j,j+i+1);
if(dict.contains(s2))
{
dp[i][j]=true;
continue;
}
for(int k=j+1;k<=j+i+1;k++)
{
if(dp[k-j-1][j]&&dp[j+i-k][k])
{
dp[i][j]=true;
break;
}
}
}
}
return dp[len-1][0];
}
}
下面解决把分词结果输出来
(已解决 7.8号)leecode 分词利用词典分词 word break的更多相关文章
- 微信公众号发送客服消息提示errcode":45015,"errmsg":"response out of time limit or subscription is canceled hint:解决办法【已解决】
微信公众号发送客服消息提示errcode":45015,"errmsg":"response out of time limit or subscription ...
- Microsoft.Office.Interop.Excel, Version=12.0.0.0版本高于引用的程序集(已解决)
Microsoft.Office.Interop.Excel, Version=12.0.0.0版本高于引用的程序集(已解决) 论坛里的帮助:http://bbs.csdn.net/topics/39 ...
- 使用Notepad++编码编译时报错(已解决?)
使用Notepad++编码编译时报错(已解决?) 使用Notepad++编码,编译的时候经常会报错,说什么GBK编码啥啥啥~~~但同样的编码用ECLIPSE就没有问题.再有,用记事本把他保存成ANSI ...
- 已解决】Sublime中运行带input或raw_input的Python代码出错:EOFError: EOF when reading a line(转)
[问题] 在折腾: [已解决]Sublime Text 2中运行Python程序出错:The system cannot find the file specified 的过程中,虽然解决了找不到py ...
- 【已解决】Android ADT中增大AVD内存后无法启动:emulator failed to allocate memory 8
[问题] 折腾: [已解决]Android ADT中增大AVD内存后无法启动:emulator failed to allocate memory 8 过程中,增大对应AVD的内存为2G后,结果无法启 ...
- 【已解决】BeautifulSoup已经获得了Unicode的Soup但是print出来却是乱码
[问题] 某人遇到的问题: 关于BeautifulSoup抓取表格及SAE数据库导入的问题(跪求大神帮忙) 简单说就是: 用如下代码: ? 1 2 3 4 5 6 7 import re,urllib ...
- Access中出现改变字段“自己主动编号”类型,不能再改回来!(已解决)
Access中出现改变字段"自己主动编号"类型,不能再改回来! (已解决) 一次把access中的自增字段改成了数值,再改回自增时,提示:在表中输入了数据之后,则不能将不论什么字段 ...
- sqlserver,执行生成脚本时“引发类型为“System.OutOfMemoryException”的异常”(已解决)
sqlserver,执行生成脚本时“引发类型为“System.OutOfMemoryException”的异常”(已解决) 出现此错误主要是因为.sql的脚本文件过大(一般都超过100M)造成内存无法 ...
- LOL是什么意思? - 已解决 - 搜狗问问
LOL是什么意思? - 已解决 - 搜狗问问 N A T S U . |分类:QQ工具栏 2009-05-04 LOL是什么意思? 满意答案 Shim Nyong 19级 2009-05-04 LOL ...
随机推荐
- Poj 3259 Wormholes(spfa判负环)
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 42366 Accepted: 15560 传送门 Descr ...
- Jquery环境搭建前言
- [转] 使用maven运行java main的三种方式
原文地址: http://blog.csdn.net/qbg19881206/article/details/19850857?utm_source=tuicool&utm_medium=re ...
- Spring Cloud App(Service) Pom示例
都配对了才能找到jar包(无法访问外网时是如何配的?) parent dependencyManageMent repositories plugInRepositories <groupId& ...
- data:image/png;base64是什么
大家可能注意到了,网页上有些图片的src或css背景图片的url后面跟了一大串字符,比如: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJ ...
- Python学习_列表推导和Lambda表达式
列表推导目的是减少将一个列表转换为另一个列表时所需编写的代码量,其功能也能用列表迭代完成 1.根据要求创建列表threes_and_fives(列表值包括1到15中能够被3或者5正常的数) three ...
- 1.MVC框架开发(初识MVC)
1.约定大于配置 Content:存放静态文件(样式表.静态图片等) Controllers:存放控制器类 Models:存放数据模型文件 Scripts:存放脚本文件 Views:存放视图文件,里面 ...
- a href="#"与a href="####"的区别是什么
前提是 :有滚动条. [感谢 黎明就在眼前 博客园园友] '#' 是有特殊意义,如果 '#' 后有内容会被认为是一个标签而从页面找到相应标签跳转到该处,找不到时会跳到页首,通常情况下使用“#ID”来 ...
- 7 -- Spring的基本用法 -- 8...
7.8 深入理解容器中的Bean 7.8.1 抽象Bean与子Bean 把多个<bean.../>配置中相同的信息提取出来,集中成配置模版------这个配置模版并不是真正的Bean,因此 ...
- 定位- CLGeoencoder - 反编码
#import "ViewController.h" #import "MBProgressHUD+MJ.h" #import <CoreLocation ...