[LeetCode]Word Break II

来源:互联网 发布:多功能数据采集模块 编辑:程序博客网 时间:2024/04/28 14:14
class Solution {//initialization problem will cause WA, because wordBreak whould be called several times for several cases in one instance//the whole memozation will also record the string which has solutions, but if record this information, it will require a lot of space, //so here we just record the string which does not have solutions.public:    vector<string> wordBreak(string s, unordered_set<string> &dict) {        // Note: The Solution object is instantiated only once and is reused by each test case.        vector<string> path;        vector<string> allPaths;        unordered_set<string> unmatchedMap;        wordBreakUtil(s, dict, path, allPaths, unmatchedMap);        return allPaths;    }private:    void wordBreakUtil(string s, unordered_set<string>& dict, vector<string>& path, vector<string>& allPaths, unordered_set<string>& unmatchedMap)    {        if(unmatchedMap.find(s) != unmatchedMap.end())            return;                if(s.size() == 0 && path.size() != 0)        {            string onePath;            for(int i = 0; i < path.size(); ++i)            {                if(i != 0) onePath += " ";                onePath += path[i];            }            allPaths.push_back(onePath);            return;        }                for(int i = 0; i < s.size(); ++i)        {            string newWord = s.substr(0, i+1);            if(dict.find(newWord) != dict.end())            {                int oldSize = allPaths.size();                path.push_back(newWord);                string remainStr = s.substr(i+1);                wordBreakUtil(remainStr, dict, path, allPaths, unmatchedMap);                path.pop_back();                if(oldSize == (int)allPaths.size()) unmatchedMap.insert(remainStr);            }        }    }    };

原创粉丝点击