[LeetCode] Word Break II

来源:互联网 发布:淘宝p图软件 2016 编辑:程序博客网 时间:2024/06/03 11:43

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> ans;    vector<string> wordBreak(string s, unordered_set<string> &dict) {        int n = s.size();        vector<bool> p(n + 1,false);        p[0] = true;        for(int i = 0;i < n;i ++){            if(p[i]){                for(int step = 1;i + step - 1 < n;step ++){                    if(dict.count(s.substr(i,step)) > 0)                        p[i + step] = true;                }            }        }        if(p[n])            dfs("",s,dict,0,p);        return ans;    }    void dfs(string ansS,string s, unordered_set<string> &dict,int start,vector<bool> p) {        for(int len = 1; start + len - 1 < s.size();len ++){            if(p[start + len] && dict.count(s.substr(start,len)) > 0){                string x = s.substr(start,len);                if(start + len < s.size())                    dfs(ansS + x + " ",s,dict,start + len,p);                else                    ans.push_back(ansS + x);            }        }    }};


0 0