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

Word Break II

时间:2014-06-28 12:40:47      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   os   

Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each word is a valid dictionary word.

Return all such possible sentences.

For example, given
s = "catsanddog",
dict = ["cat", "cats", "and", "sand", "dog"].

A solution is ["cats and dog", "cat sand dog"].

思路:这道题是把s分解成任何可能的单词,并存在于dict中,而且可以组合成s。这依然使用动态规划,配合着DFS找到任何可能存在于dict中的子字符串。

Is[i]表示s[0,i)之间存在划分使分割后的字符串在dict里,赋值true,关于这一点可以看Word Break中的描述。至于dp[j][i]表示的是从j到i之间的字符是否存在于dict里。

class Solution {
public:
    void genWord(string &s,vector<vector<bool> > &dp,int index,vector<string> &path,vector<string> &result)
    {
        if(index==0)
        {
            string str;
            for(int i=path.size()-1;i>=0;i--)
            {
                str+=path[i];
                if(i!=0)
                {
                    str.push_back( );
                }
            }
            result.push_back(str);
        }
        for(int i=0;i<s.size();i++)
        {
            if(dp[i][index])
            {
                path.push_back(s.substr(i,index-i));
                genWord(s,dp,i,path,result);
                path.pop_back();
            }
        }
    }
    vector<string> wordBreak(string s, unordered_set<string> &dict) {
        int n=s.size();
        vector<string> result;
        result.clear();
        vector<string> mystring;
        mystring.clear();
        vector<vector<bool> > dp(n,vector<bool>(n+1,false));
        vector<bool> Is(n+1,false);
        Is[0]=true;
        if(n==0)
            return result;
        for(int i=1;i<=n;i++)
        {
            for(int j=i-1;j>=0;j--)
            {
                if(Is[j] && dict.find(s.substr(j,i-j))!=dict.end())
                {
                    Is[i]=true;
                    dp[j][i]=true;
                }
            }
        }
        genWord(s,dp,n,mystring,result);
        return result;
    }
};

 

Word Break II,布布扣,bubuko.com

Word Break II

标签:style   blog   http   color   使用   os   

原文地址:http://www.cnblogs.com/awy-blog/p/3798846.html

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