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

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. Cocos2d-x 3.0 cocostudio骨骼动画的动态换肤

    概述 游戏中人物的状态会发生改变,而这种改变通常要通过局部的变化来表现出来.比如获得一件装备后人物形象的改变,或者战斗中武器.防具的损坏等.这些变化的实现就要通过动态换肤来实现.在接下来的这个Demo ...

  2. dp方程

    1.        资源问题1 -----机器分配问题 F[I,j]:=max(f[i-1,k]+w[i,j-k]) 2.        资源问题2 ------01背包问题   F[I,j]:=ma ...

  3. 锋利的Jquery解惑系列(二)------插件开发大总结

    申明:插件开发是实际项目就经常用到的,不过也是挺吃力的.笔者自己做项目时,看着我们老大写的jQuery一头桨糊,那叫个痛苦.后面果断买了本参考书以及浏览别人的博客,现在也算慢慢入门了.现在总结自己的一 ...

  4. thinkphp 缓存写入失败,网站报错

    周末,正在家里休息,同事突然call 我,说网站打不开了,网站一直很正常的,突然成这样,肯定某个地方出问题了, 原来是网站所在的硬盘分区,没空间了,被mysql的日志占满了!!! 哎,好好的周末,在公 ...

  5. ECMAScript位操作符

    在ECMAScript中,有少数的几个操作符可以对二进制位进行直接操作,这几个操作符本身直接对二进制进行操作,所有它们的本身是非常效率的,学习这一段有助于以后的优化以及理解. ECMAScript中采 ...

  6. jQuery学习 day01

    最近受某大牛指点(我不会说他姓范),了解了一下jQuery,据说很牛X,就了解了一下,第一天,分享给大家一些心得吧. 1.首先就是导入jQuery文件了,这里我是去jQuery官网下载的.(大家可以去 ...

  7. 『奇葩问题集锦』Cannot find module 'webpack/lib/node/NodeTemplatePlugin'

    第一步:npm config get prefix ,获取输出path“C:\Users\jaxGu\AppData\Roaming\npm”加上"\node_modules"用于 ...

  8. wamp介绍

    Wamp介绍      Windows下的Apache+Mysql/MariaDB+Perl/PHP/Python,一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在 ...

  9. mvc4 membership, [Win32Exception (0x80004005): The system cannot find the file specified]

    public class UsersContext : DbContext { public UsersContext() : base("conn1") //change the ...

  10. python中的__init__ 、__new__、__call__等内置函数的剖析

    1.__new__(cls, *args, **kwargs)   创建对象时调用,返回当前对象的一个实例;注意:这里的第一个参数是cls即class本身2.__init__(self, *args, ...