码迷,mamicode.com
首页 > 其他好文 > 详细

Word Break (14)

时间:2014-11-13 01:44:09      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   ar   os   sp   for   

 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"

这一题是一题简单的动态规划。设bool ok[s.len+1],ok[i]的含义是长度为i的字符串是否能被字典中的单词所匹配。设ok[0]=true,即长度为0的字符串设置为能被匹配。很容易写出最优子结构。如下,有:

ok[i]=     true    (i=0)

     ok[j]&&(dict能否找到由s[j...i-1]的匹配的单词)   (  j由i-1到0,有一个为true 就break)

其思想是用ok[i]记录长度为i的字符串s[0...i]是否能被字典匹配,对于更长的字符串,如果该字符串能分为两部分,前半部分已经可以匹配了,剩下的后半部分在字典里有匹配项,则该更长的字符串也能被匹配。

上代码:

 1 class Solution {
 2 public:
 3    bool wordBreak(string s, unordered_set<string> &dict) {
 4         int len=s.length();
 5         int i,j;
 6         bool *ok=new bool[len+1];
 7         memset(ok,false,(len+1)*sizeof(bool));//这里不能为sizeof(ok),否则会wrong
 8         ok[0]=true;
 9         for(i=1;i<=len;i++){
10             for(j=i-1;j>=0;j--){
11                 if(ok[j]&&dict.find(s.substr(j,i-j))!=dict.end())
12                 {
13                     ok[i]=true;
14                     break;
15                 }
16             }
17         }
18         return ok[len];
19     }
20 };

贴出一段简单的代码及其运行结果!貌似腾讯实习生笔试出过这题,但是一直不知道为什么。上文中的错误就在此处,ps:因为这个原因找了好长时间都没找到错误。

1 #include<iostream>
2 
3 using namespace std;
4 
5 int main(){
6     bool *ok=new bool [100];
7     cout<<sizeof(ok);//结果是4
8 }

bubuko.com,布布扣

 

Word Break (14)

标签:style   blog   http   io   color   ar   os   sp   for   

原文地址:http://www.cnblogs.com/zhoudayang/p/4093920.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!