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-面试算法经典-Java实现】【113-Path Sum II(路径和)】

【113-Path Sum II(路径和II)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given a binary tree and a sum, find al...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月12日 06:23
  • 2480

【LeetCode-面试算法经典-Java实现】【219-Contains Duplicate II(包含重复元素II)】

【219-Contains Duplicate II(包含重复元素II)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】代码下载【https://github.com/Wang-...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月29日 06:36
  • 3238

Leetcode 454. 4Sum II 四数之和2 解题报告

1 解题思想首先,这是一道远古之前的题的进化版: Leetcode #18 4Sum 四数之和 解题小节+K-Sum思想 但是我不想说那个题了,因为我也记不住了。。这道题意思就是ABCD四个数组,长...
  • MebiuW
  • MebiuW
  • 2016年11月16日 22:45
  • 2754

leetcode day7 -- Word Break I II

1、  Word Break
  • KUAILE123
  • KUAILE123
  • 2014年04月29日 22:52
  • 1035

LeetCode题解:Word Break I and II

Word Break Given a string s and a dictionary of words dict, determine if s can be segmented in...
  • MagiSu
  • MagiSu
  • 2013年11月15日 05:54
  • 2655

LeetCode: Word Break II [140]

【题目】 Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where...
  • HarryHuang1990
  • HarryHuang1990
  • 2014年06月28日 20:59
  • 745

算法学习之回溯法(leetcode 140. Word Break II)

leetcode 140. Word Break II Given a string s and a dictionary of words dict, add spaces in s to con...
  • maxiaotiaoti
  • maxiaotiaoti
  • 2016年10月29日 17:36
  • 225

[Leetcode] Word Break II (Java)

Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each ...
  • StarCXDJ
  • StarCXDJ
  • 2014年02月17日 10:34
  • 573

leetcode:word break II

Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each ...
  • le119126
  • le119126
  • 2015年12月15日 21:22
  • 342

Leetcode--Word Break II

Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each ...
  • yskyj
  • yskyj
  • 2014年10月06日 11:19
  • 330
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Leetcode-Word Break II
举报原因:
原因补充:

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