class Solution {
private:
map<string,vector<string>> m;//m存储从s 到分割结果result的映射
vector<string> combine(string word,vector<string> pre)
{
for(int i=0;i<pre.size();i++)
{
pre[i]+=" "+word;
}
return pre;
}
public:
vector<string> wordBreak(string s, unordered_set<string>& wordDict) {
if(m.count(s))return m[s];//如果s已经被分割过 则直接返回结果
vector<string> result;
if(wordDict.count(s))//整个s字符串是wordDict中的一个字符
result.push_back(s);
for(int i=1;i<s.size();i++)
{
string word=s.substr(i);
if(wordDict.count(word))
{
string rem=s.substr(0,i);
vector<string> subresult=combine(word,wordBreak(rem,wordDict));
result.insert(result.end(),subresult.begin(),subresult.end());
}
}
m[s]=result;//记忆分割字符串s的结果
return result;
}
};
140. Word Break II
最新推荐文章于 2021-07-24 20:33:45 发布