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

[LeetCode] Word Break

时间:2014-06-18 22:11:44      阅读:200      评论:0      收藏:0      [点我收藏+]

标签: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

[LeetCode] Word Break

标签:style   class   blog   code   color   string   

原文地址:http://www.cnblogs.com/Xylophone/p/3790203.html

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