LeetCode之Word Break II

来源:互联网 发布:网络奇葩女唯一的承诺 编辑:程序博客网 时间:2024/05/22 10:39
/*与Word Break II 相似,不过需要记住单词的前驱。用深度搜索算法获得结果输出。参考自:https://github.com/soulmachine/leetcode*/class Solution {public:    vector<string> wordBreak(string s, unordered_set<string>& wordDict) {        if(s.empty()) return vector<string>();                vector<int> dp(s.size()+1, 0);        vector<vector<int> > prev(s.size()+1, vector<int>(s.size()+1, 0));                dp[0] = 1;        for(int i = 1; i <= s.size(); ++i){            for(int j = i - 1; j >= 0; --j){                if(dp[j] == 1 && wordDict.find(s.substr(j, i-j)) != wordDict.end()){                    dp[i] = 1;                    prev[i][j] = 1;                }            }        }                vector<string> path;        vector<string> res;        get_result(s, prev, path, res, s.size());        return res;    }        void get_result(const string &s, const vector<vector<int> > &prev, vector<string> &path, vector<string> &res, int cur)    {        if(cur == 0){            string tmp;            for(int i = path.size()-1; i >= 0; --i){                tmp += path[i];                if(i > 0) tmp += " ";            }            res.push_back(tmp);            return;        }        else{            for(int i = s.size()-1; i >= 0; --i){                if(prev[cur][i]){                    path.push_back(s.substr(i, cur-i));                    get_result(s, prev, path, res, i);                    path.pop_back();                }            }        }    }};

0 0
原创粉丝点击