• LeetCode OJ


    题目:

    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"].

    解题思路:

      1、首先想到的是利用DFS深搜, 但是这样会超时

      2、利用DP+DFS打印。

        设dp[i] 表示前i个字符都满足要求;site[i]表示可行 迭代表, 即回退表

        动归方程:if dp[j] == true && s[j+1 .. i] in dict ; then dp [i] = true; { 0 < j < i}

    代码如下:

    class Solution {
    public:
        vector<string> DFS(const string &s, vector<int> *site, int ith)
        {
            vector<string> res;
            for(int i = 0; i < site[ith].size(); i ++)
            {
                vector<string> tmp;
                string str = s.substr(site[ith][i], ith - site[ith][i]);
                if(site[site[ith][i]].size() == 0)
                    res.push_back(str);
                else
                {
                    tmp = DFS(s, site, site[ith][i]);
                    for(int j = 0; j < tmp.size(); j ++)
                        res.push_back(tmp[j] + " " + str);
                }
            }
            return res;
        }
        vector<string> wordBreak(string s, unordered_set<string> &dict) {
            //DP + print path
            int n = s.length();
            vector<bool> dp(n + 1, false); // dp[i] 表示前i个字符都满足要求
            vector<int>* site = new vector<int>[n + 1];// 可行 迭代表
            dp[0] = true;
            for (int i = 1; i <= n; i++) {
                for (int j = 0; j < i; j++) {
                    if (dp[j] == true && dict.count(s.substr(j, i - j))) {
                        dp[i] = true;
                        site[i].push_back(j);
                    }
                }
            }
            return DFS(s, site, s.length());
        }
    };
  • 相关阅读:
    20200807日报
    20200806日报
    《大道至简》读书感悟
    20200805日报
    20200804日报
    20200803日报
    20200802日报
    vue中mounted内如何调完异步方法再渲染
    小程序画布识别iPhone11
    np.meshgrid() 生成网格坐标函数
  • 原文地址:https://www.cnblogs.com/dongguangqing/p/3726689.html
Copyright © 2020-2023  润新知