(已解决 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 ... 
随机推荐
- 解决Windows+Eclipse+Python错误: SyntaxError: Non-ASCII character
			这个问题出现的原因是在文中使用了中文或者其他的非英文字符 最简单的解决办法: 在文件的第一行加上编码表示,切记:一定要是第一行,而且在前面没有任何对文件和项目的注释. 也就是说在Windows Ecl ... 
- 【CF493E】【数学】Vasya and Polynomial
			Vasya is studying in the last class of school and soon he will take exams. He decided to study polyn ... 
- Win7下Boost库的安装
			Boost库是C++领域公认的经过千锤百炼的知名C++类库,涉及编程中的方方面面,简单记录一下使用时的安装过程 1.boost库的下载 boost库官网主页:www.boost.org 2.安装 将下 ... 
- IIS原理学习
			IIS 原理学习 首先声明以下内容是我在网上搜索后整理的,在此只是进行记录,以备往后查阅只用. IIS 5.x介绍 IIS 5.x一个显著的特征就是Web Server和真正的ASP.NET Appl ... 
- Mac apache配置问题解决
			AH00526: Syntax error on line 20 of /private/etc/apache2/extra/httpd-mpm.conf: Invalid command 'Lock ... 
- 响应式页面字体用什么单位:rem
			html:62.5%//10pxbody:1.4rem;//14px... <!doctype html> <html> <head> <title>a ... 
- jsonp多次请求报错 not a function的解决方法
			添加时间戳给callbackId $.ajax({ type: "get", url: url, timeout: 6000, data: param, cache: false, ... 
- Activity的测量(Measure)、布局(Layout)和绘制(Draw)过程分析
			一个Android应用程序窗口里面包含了很多UI元素,这些UI元素是以树形结构来组织的,即它们存在着父子关系,其中,子UI元素位于父UI元素里面,因此,在绘制一个Android应用程序窗口的UI之前, ... 
- 如何写一个像btgoogle一样的12306泄露数据查询
			demo地址:http://www.btgoogle.com/12306/ 圣诞节,12306送给了我们一个大礼物.大约 14w的数据泄露, 看网上都沸沸扬扬的.开始也准备找一个数据库来看看,随后,我 ... 
- sqlsever2008数据库的备份与还原
			本文数据库的名称为ProjectControl public static SqlConnection conn = new SqlConnection("server=(local);u ... 
