标签: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 }
标签:style blog http io color ar os sp for
原文地址:http://www.cnblogs.com/zhoudayang/p/4093920.html