/*动态规划法。
设dp[i]表示s[0...i]是否满足题意,则有
dp[i] = {dp[k] && s.substr(k, i-k)}(k=0...i-1,有一个为真即可)。*/
class Solution {
public:
bool wordBreak(string s, unordered_set<string>& wordDict) {
if(s.empty()) return true;
vector<int> dp(s.size()+1, 0);
dp[0] = 1;
for(int i = 1; i <= s.size(); ++i){
for(int k = i-1; k >= 0; --k){
if(dp[k] && wordDict.find(s.substr(k, i-k)) != wordDict.end()){
dp[i] = 1;
break;
}
}
}
return dp[s.size()];
}
};