标签:style class blog code color string
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"
.
class Solution { public: bool wordBreak(string s, unordered_set<string> &dict) { string::size_type len = s.size(); vector<bool> dp(len,false); for(int i=0;i<len;i++) { for(int j=i;j<len;j++) { string str = s.substr(i,j-i+1); if(dict.find(str)!=dict.end() && (i==0 || dp[i-1]==true)) dp[j]=true;//dp[j]里记录从下标0到j是否是可分割的 } } return dp[len-1]; } };
说明:本算法用了动态规划的相关知识。由于递归算法会产生低效的程序,有时我们需要把递归算法写成非递归算法,利用把子问题的答案系统的记录在一个表内,
(例如本程序中用vector<bool> dp来记录从小标0到j是否可分割),利用这种技巧的方法就称为动态规划。
我们知道的利用动态规划的例子如:计算斐波那契数列。
计算斐波那契数列的自然递归程序有很多重复的计算,非常低效,用动态规划计算Fn就可以先把Fn-1和Fn-2记录起来直接用。
[LeetCode] Word Break,布布扣,bubuko.com
标签:style class blog code color string
原文地址:http://www.cnblogs.com/Xylophone/p/3790203.html