[leetcode 140] Word Break II

来源:互联网 发布:淘宝购物客户资源 编辑:程序博客网 时间:2024/03/29 07:54

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



class Solution {public:    vector<string> wordBreak(string s, unordered_set<string> &dict) {        const int n = s.size();        int f[n+1];        fill_n(&f[0], n+1, false);        f[0] = true;        vector<vector<bool> > prev(n+1, vector<bool>(n, false));        for (int i = 1; i <= n; i++) {            for (int j = 0; j < i; j++) {                if (f[j] && dict.find(s.substr(j,i-j)) != dict.end()) {                    f[i] = true;                    prev[i][j] = true;                }            }        }        vector<string> cur;        vector<string> res;        dfs(s, n, cur, res, prev);        return res;            }    void dfs(string s, int n, vector<string> &cur, vector<string> &res, const vector<vector<bool> > &prev) {        if (n == 0) {            string tmp;            for (auto i = cur.crbegin(); i != cur.crend(); i++) {                tmp += *i + " ";            }            tmp.erase(tmp.end()-1);            res.push_back(tmp);            return ;        }        for (int i = s.size()-1; i >= 0; i--) {            if (prev[n][i]) {                cur.push_back(s.substr(i, n-i));                dfs(s, i, cur, res, prev);                cur.pop_back();            }        }    }};


0 0
原创粉丝点击