不戚戚于贫贱,不汲汲于富贵      ---五柳先生

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的更多相关文章

  1. 微信公众号发送客服消息提示errcode":45015,"errmsg":"response out of time limit or subscription is canceled hint:解决办法【已解决】

    微信公众号发送客服消息提示errcode":45015,"errmsg":"response out of time limit or subscription ...

  2. Microsoft.Office.Interop.Excel, Version=12.0.0.0版本高于引用的程序集(已解决)

    Microsoft.Office.Interop.Excel, Version=12.0.0.0版本高于引用的程序集(已解决) 论坛里的帮助:http://bbs.csdn.net/topics/39 ...

  3. 使用Notepad++编码编译时报错(已解决?)

    使用Notepad++编码编译时报错(已解决?) 使用Notepad++编码,编译的时候经常会报错,说什么GBK编码啥啥啥~~~但同样的编码用ECLIPSE就没有问题.再有,用记事本把他保存成ANSI ...

  4. 已解决】Sublime中运行带input或raw_input的Python代码出错:EOFError: EOF when reading a line(转)

    [问题] 在折腾: [已解决]Sublime Text 2中运行Python程序出错:The system cannot find the file specified 的过程中,虽然解决了找不到py ...

  5. 【已解决】Android ADT中增大AVD内存后无法启动:emulator failed to allocate memory 8

    [问题] 折腾: [已解决]Android ADT中增大AVD内存后无法启动:emulator failed to allocate memory 8 过程中,增大对应AVD的内存为2G后,结果无法启 ...

  6. 【已解决】BeautifulSoup已经获得了Unicode的Soup但是print出来却是乱码

    [问题] 某人遇到的问题: 关于BeautifulSoup抓取表格及SAE数据库导入的问题(跪求大神帮忙) 简单说就是: 用如下代码: ? 1 2 3 4 5 6 7 import re,urllib ...

  7. Access中出现改变字段“自己主动编号”类型,不能再改回来!(已解决)

    Access中出现改变字段"自己主动编号"类型,不能再改回来! (已解决) 一次把access中的自增字段改成了数值,再改回自增时,提示:在表中输入了数据之后,则不能将不论什么字段 ...

  8. sqlserver,执行生成脚本时“引发类型为“System.OutOfMemoryException”的异常”(已解决)

    sqlserver,执行生成脚本时“引发类型为“System.OutOfMemoryException”的异常”(已解决) 出现此错误主要是因为.sql的脚本文件过大(一般都超过100M)造成内存无法 ...

  9. LOL是什么意思? - 已解决 - 搜狗问问

    LOL是什么意思? - 已解决 - 搜狗问问 N A T S U . |分类:QQ工具栏 2009-05-04 LOL是什么意思? 满意答案 Shim Nyong 19级 2009-05-04 LOL ...

随机推荐

  1. Codevs 5208 求乘方取模

    5208 求乘方取模 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 未定级 题目描述 Description 给定非负整数A.B.M,求(A ^ B) mod M. 输入描述 Inpu ...

  2. docker 中搭建tomcat

    关于docker中tomcat的搭建,没有什么多说的,直接下载官方镜像 docker pull tomcat  (可能会下载到好几个镜像,就是tag不同,有知道为什么的可以告诉我) 然后我看的  ht ...

  3. nginx 显示discuz页面

    我也不知道我题目表述的对不对.我也是刚学习. 安装nginx 显示discuz的界面.我看了好几次视频,也没发现哪的问题.就是一直出现502的错误代码 我又重新查了几次.觉得需要注意一下几点: 1,关 ...

  4. 高性能网络I/O框架-netmap源码分析

    from:http://blog.chinaunix.net/uid-23629988-id-3594118.html 博主这篇文章写的很好 感觉很有借签意义 值得阅读 高性能网络I/O框架-netm ...

  5. .net ajax式上传文件

    今天在这里介绍一下ajax上传文件.其实也不算是真的使用xmlhttprequest上传,只是使用了iframe实现了无刷新上传而已,最多也只算 是仿ajax上传文件.然而网上关于使用xmlhttpr ...

  6. css3动画使用技巧之——transform-delay为负值时的应用。

    <html>    <head>        <title>css3动画delay为负值时的效果</title>        <meta ch ...

  7. 经典的C程序

    程序一:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数 #include<stdio.h> void main(){ int a, b, c, i; ; ...

  8. Apache配置允许文件索引

    这两天在看bootstrap的文档,所以在本地搭建了一个web server. 这里记下Apache的一个小配置: LISTEN *:8000 <VirtualHost *:8000> A ...

  9. 【WPF】Dispatcher及线程操作

    WPF 应用程序启动后,会有两个线程: 1. 一个是用来处理UI呈现(处理UI的请求,比如输入和展现等操作). 2. 一个用来管理 UI的 (对UI元素及整个UI进行管理). 像Winform一样,W ...

  10. javabean+servlet+jsp程序_个人辛苦探索

    主要介绍主流的java web编程技术.设计模式和框架,以及如何利用Eclipese开发Web应用程序. 要点:1.Java Web编程的主要组件技术: 2.MVC设计模式: 3.用Eclipse构建 ...