leetcode 140 Word Break II
leetcode 139 word break
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
unordered_set<string> wordset(wordDict.begin(),wordDict.end());
vector<int> memo(s.size(),-1);
return check(s,wordset,0,memo);
}
bool check(const string &s,unordered_set<string> &wordset,int start,vector<int> &memo)
{
if(start>=s.size()) return true;
if(memo[start]!=-1) return memo[start];
for(int i=start+1;i<=s.size();++i)
{
if(wordset.count(s.substr(start,i-start))&&check(s,wordset,i,memo))
{
return memo[start]=1;
}
}
return memo[start]=0;
}
};leetcode 140
1. 用hashset存储wordDict,查找效率高;unordered_map<int,vector<string>>记忆数组,存储从位置i开始,所有可能的情况。
class Solution {
public:
vector<string> wordBreak(string s, vector<string>& wordDict) {
unordered_set<string> words(wordDict.begin(),wordDict.end());
unordered_map<int,vector<string>> memo;
helper(s,0,words,memo);
return memo[0];
}
vector<string> helper(string& s,int start,unordered_set<string>& words,unordered_map<int,vector<string>> &memo) {
if(start>=s.size()) return {""};
if(memo.find(start)!=memo.end()) return memo[start];
for(int i=start+1;i<=s.size();++i) {
string tmp=s.substr(start,i-start);
if(words.find(tmp)!=words.end()) {
auto vals=helper(s,i,words,memo);
for(auto& val:vals) memo[start].push_back(tmp+(val.empty()?"":" ")+val);
}
}
return memo[start];
}
};2. https://www.cnblogs.com/grandyang/p/4576240.html
相关推荐
aanndd 2020-08-12
aanndd 2020-07-26
aanndd 2020-07-08
zangdaiyang 2020-07-04
yaohustiAC 2020-06-28
us0 2020-06-28
yaohustiAC 2020-06-28
zangdaiyang 2020-06-28
Clairezz 2020-06-28
嗡汤圆 2020-06-26
嗡汤圆 2020-06-21
aanndd 2020-06-16
aanndd 2020-06-16
码墨 2020-06-16
yaohustiAC 2020-06-11
zangdaiyang 2020-06-10
jiayuqicz 2020-06-09
yaohustiAC 2020-06-06
heray0 2020-06-04