Leetcode-Word Break II

原创 2015年07月06日 17:26:40

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”].
题意:对于一个字符串和给定字典,给出字符串由字典中字符组成的所有可能结果。
DP,类似前面提到的Work Break,这里标志位变为二维的,map< int,vector < string > > dp1,int存放字符在s中的位置,vector则存放改字符之前的所有可能string组合方式。
步骤:
对于s中(0,i)的字符串,判断是否在字典中,若在,则将其加入dp1[i]中,若不存在,则对j(j >= 1 && j < i),若dp1[j].size()>0,判断(j,i)之间的字符串是否在字典中,若存在,则将其附着在dp[j]中字符串之后。

vector<string> wordBreak(string s, unordered_set<string>& wordDict) {

    map<int,vector<string>> dp1;
    if(s.length()==0)
    {
        return vector<string>();
    }

    int ii=s.length()-1;
    for(;ii>=0;--ii)
    {
        string t=s.substr(ii,s.length()-ii);
       if(wordDict.find(t)!=wordDict.end())
        {
            break;
        }
    }
    if(ii<0)
    {
        return vector<string>();
    }

    for(int i=1;i<=s.length();++i)
    {
        string t=s.substr(0,i);
        dp1[i]=vector<string>();
        if(wordDict.find(t)!=wordDict.end())
        {
            dp1[i].push_back(t);
        }
         for(int j=1;j<i;++j)
            {
                if(dp1[j].size()>0)
                {
                    string t1=s.substr(j,i-j);
                    if(wordDict.find(t1)!=wordDict.end())
                   {
                      for(int k=0;k<dp1[j].size();++k)
                      {
                        string t3=dp1[j][k];
                        t3=t3+" "+t1;
                        dp1[i].push_back(t3);
                     }
                   }

                }
             }    
    }
    return dp1[s.length()];

    }

相关文章推荐

LeetCode——Word Break II

Word Break II Given a string s and a dictionary of words dict, add spaces in s to construc...

LeetCode (Word Break II )

题目要求: Given a string s and a dictionary of words dict, add spaces in s to construct a sentence ...
  • lqcsp
  • lqcsp
  • 2014年04月07日 04:08
  • 1276

Leetcode Word Break II

Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, add spac...

【leetcode】word-break-ii

Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each ...
  • WX_East
  • WX_East
  • 2017年04月30日 17:03
  • 274

[LeetCode] Word Break II

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

LeetCode(140) Word Break II

题目如下: Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where...

LeetCode_DP_Word Break II

LeetCode_Word Break II一、题目描述:二、解决思路:题目要求我们要在原字符串中加空格,使得隔开的每个词都是词典中的词。 所以我们大可以按顺序扫描每个字符,但是然后当碰到是词典中的...
  • glDemo
  • glDemo
  • 2015年08月16日 21:55
  • 665

LeetCode 140 Word Break II--In C++

思路: 首先想到的是递归的解法,但是考虑到TLE的问题,此路不通。其次是动态规划的版本,结合139 Word Break ,只需扩展那个动态数组就可以了。139中用一个bool数组表示dp[i]之前...

[leetcode] 140. Word Break II 解题报告

题目链接:https://leetcode.com/problems/word-break-ii/ Given a string s and a dictionary of words dict,...

[leetcode]break word II

问题描述: Given a string s and a dictionary of words dict, add spaces in s to construct a sentence wher...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Leetcode-Word Break II
举报原因:
原因补充:

(最多只允许输入30个字)