Word Break II

Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, add spaces in s to construct a sentence where each word is a valid dictionary word. Return all such possible sentences. 

Example:

Input:
s = "catsanddog"
wordDict = ["cat", "cats", "and", "sand", "dog"]
Output:
[
  "cats and dog",
  "cat sand dog"
]

Approach:

C++

#include <bits/stdc++.h>
using namespace std;

unordered_map<stringvector<string>> dp;
vector<stringwordBreak(string svector<string&wordDictint i)
{

    if (s.empty())
        return {""};

    if (dp.find(s!= dp.end())
        return dp[s];

    vector<stringsubpartwholepart;
    for (string word : wordDict)
    {
        string igot = s.substr(0word.length());

        if (igot != word)
        {
            continue;
        }
        else
        {
            subpart = wordBreak(s.substr(word.length()), wordDict0);
        }

        for (string ans : subpart)
        {
            string space = ans.length() == 0 ? "" : " ";
            wholepart.push_back(word + space + ans);
        }
    }

    return dp[s] = wholepart;
}
vector<stringwordBreak(string svector<string&wordDict)
{
    dp.clear();
    return wordBreak(swordDict0);
}

int main()
{
    string s = "catsanddog";
    vector<stringwordDict = {"cat""cats""and""sand""dog"};
    vector<stringres = wordBreak(swordDict);

    cout << "[";
    for (int i = 0i < res.size() - 1i++)
    {
        cout << res[i] << ",";
    }
    cout << res[res.size() - 1];
    cout << "]";

    return 0;
}


No comments:

Post a Comment