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

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 3729 飞扬的小鸟

    飞扬的小鸟 标签 动态规划 NOIp提高组 2014 难度 提高+/省选- 题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小 ...

  2. bzoj1014:[JSOI2008]火星人prefix

    思路:插入.修改操作是splay的模型,然后询问的话就可以二分答案,然后再用splay去判,关键就在于怎么去判断. 可以用字符串hash,splay每个节点维护一个hash域,然后就可以定义一个进制去 ...

  3. (hdu)1160 FatMouse's Speed

    Problem Description FatMouse believes that the fatter a mouse is, the faster it runs. To disprove th ...

  4. em,pt和px之间的换算

    任意浏览器的默认字体高度16px(16像素).所有未经调整的浏览器都符合: 1em=16px.那么12px=0.75em,10px=0.625em.为了简化font-size的换算,需要在css中的b ...

  5. 限制apache错误日志大小

    ①配置错误日志 在http.conf配置: ErrorLog "| /opt/lampp/bin/rotatelogs /opt/lampp/logs/%Y_%m_%d_error_log  ...

  6. php接收二进制数据流转换成图片

    <?php /** * 图片类 * @author Haroldphp@163.com * @version 1.0 * PHP默认只识别application/x-www.form-urlen ...

  7. 方便mac os 10.9系统中phpstorm配置php运行环境

    自己安装php,不用mac安装,这样就有php开发环境了. 安装很简单,直接运行一个命令, 需要几分钟,请慢慢等待. curl -s http://php-osx.liip.ch/install.sh ...

  8. .Net平台下的B/S开发框架

    一.前言 本文主要是对.Net平台下的几种B/S开发框架进行比较.只对比前端展现和界面业务逻辑的部分,对于后台的数据层.业务层.持久层等则不作讨论,因为这些部分是完全可以共用的.  主要从如下几个维度 ...

  9. 介绍.NET Core

    在connect (),我们宣布.NET 核心将能完全释放,作为开放源码软件.我也答应在.NET 核心跟更多的细节.在这篇文章,我将提供.NET 核心,我们如何去释放它,它涉及到.NET 框架,如何和 ...

  10. Socket实现简单的聊天通信

    最近学习了Socket后,感觉Socket挺好玩的,在博客中看到socket在实时聊天功能的很强大,于是乎就做了一个简单的聊天功能,今天贴出来,能够与大家一起共享,有不对之处,能够给予指出,谢谢! 服 ...