// dp[i]表示1到i是否能拼成
// dp[i] = dp[i] | dp[j] if (j, i)能找到单词匹配
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
int n = s.length();
vector<bool> dp(n + 1);
dp[0] = true;
for (int i = 1; i <= n; i++) {
for (int j = i - 1; j >= 0; j--) {
string sub = s.substr(j, i - j);
if (match(sub, wordDict)){
dp[i] = dp[i] | dp[j];
}
}
}
return dp[n];
}
bool match(string s, vector<string>& word) {
int m = word.size();
for (int i = 0;i < m; i++) {
if (s == word[i]){
return true;
}
}
return false;
}
};
09-14
131
09-21
110