博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Leetcode] Word Break
阅读量:6473 次
发布时间:2019-06-23

本文共 2805 字,大约阅读时间需要 9 分钟。

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".

动规实在是太强大了!注意在枚举子串长度时,只要枚举从dict字典中最短单词到最长单词的长度就可以了。

1 class Solution { 2 public: 3     /** 4      * @param s: A string s 5      * @param dict: A dictionary of words dict 6      */ 7     bool wordBreak(string s, unordered_set
&dict) { 8 // write your code here 9 vector
dp(s.length() + 1, false);10 dp[0] = true;11 int min_len = INT_MAX, max_len = INT_MIN;12 for (auto &ss : dict) {13 min_len = min(min_len, (int)ss.length());14 max_len = max(max_len, (int)ss.length());15 }16 for (int i = 0; i < s.length(); ++i) if(dp[i]) {17 for (int len = min_len; i + len <= s.length() && len <= max_len; ++len) {18 if (dict.find(s.substr(i, len)) != dict.end()) 19 dp[i + len] = true;20 }21 if (dp[s.length()]) return true;22 }23 return dp[s.length()];24 }25 };

再看个非动规的版本:

1 class Solution { 2 public: 3   bool wordBreakHelper(string s,unordered_set
&dict,set
&unmatched,int mn,int mx) { 4 if(s.size() < 1) return true; 5 int i = mx < s.length() ? mx : s.length(); 6 for(; i >= mn ; i--) 7 { 8 string preffixstr = s.substr(0,i); 9 if(dict.find(preffixstr) != dict.end()){ 10 string suffixstr = s.substr(i); 11 if(unmatched.find(suffixstr) != unmatched.end()) 12 continue; 13 else 14 if(wordBreakHelper(suffixstr, dict, unmatched,mn,mx)) 15 return true; 16 else 17 unmatched.insert(suffixstr); 18 } 19 } 20 return false; 21 } 22 bool wordBreak(string s, unordered_set
&dict) { 23 // Note: The Solution object is instantiated only once. 24 if(s.length() < 1) return true; 25 if(dict.empty()) return false; 26 unordered_set
::iterator it = dict.begin(); 27 int maxlen=(*it).length(), minlen=(*it).length(); 28 for(it++; it != dict.end(); it++) 29 if((*it).length() > maxlen) 30 maxlen = (*it).length(); 31 else if((*it).length() < minlen) 32 minlen = (*it).length(); 33 set
unmatched; 34 return wordBreakHelper(s,dict,unmatched,minlen,maxlen); 35 }36 };

 

转载地址:http://qyvko.baihongyu.com/

你可能感兴趣的文章
Velocity处理多余空白和多余空白行问题
查看>>
java值传递
查看>>
DB2与oracle有什么区别
查看>>
创建一个多级文件目录
查看>>
Picasa生成图片幻灯片页面图文教程
查看>>
js获取当前时间的前一天/后一天
查看>>
Python字符串的格式化
查看>>
C#反射---属性
查看>>
服务器常用的状态码及其对应的含义如下
查看>>
zoom和transform:scale的区别
查看>>
黄聪:PHP 防护XSS,SQL,代码执行,文件包含等多种高危漏洞
查看>>
svn status 显示 ~xx
查看>>
常用HiveQL总结
查看>>
[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
查看>>
POJ 3311 Hie with the Pie(状压DP + Floyd)
查看>>
Security updates and resources
查看>>
深入理解JavaScript系列(25):设计模式之单例模式
查看>>
DNS为什么通常都会设置为14.114.114.114
查看>>
Sqoop架构(四)
查看>>
golang copy函数
查看>>