@TOC
原题
思路
- 动态规划
- 用一个集合存储word字典里的所有word,用一个动态数组存储s字符串从[0,i]的子字符串是否能用字典拼出。这里dp[0]为true,[0,i]这个字符串存在的条件就是 这个区间里dp[j]为true,且字典里存在[j,i]这个字符串,这里的j是[0, i]中的值。
代码
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
unordered_set<string> wordSet(wordDict.begin(), wordDict.end());
int sl = s.length();
auto dp = vector<bool> (sl+1, false);
dp[0] = true;
for (int i = 1; i <= sl; i++) {
for (int j = 0; j < i; j++) {
if (dp[j] && (wordSet.find(s.substr(j, i - j)) != wordSet.end())) {
dp[i] = true;
break;
}
}
}
return dp[sl];
}
};