题目描述:
给定一个字符串和一个字典,查看字符串能不能由字典里的单词构成。
思路:
动态规划。
两层for循环。假如前i个字符串(左半部分)可以被字典里的单词分解,从i字符串后面的字符串(右半部分)也在字典里,那么这个字符串就有解。
注意边界。
代码:
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
int len = s.length();
vector<int> dp(len+1, 0);
dp[0] = 1;
for (int i=1; i<=len; ++i) {
for (int j=0; j<i; ++j) {
if (dp[j] && count(wordDict.begin(), wordDict.end(), s.substr(j, i-j)) == 1) {
dp[i] = 1;
break;
}
}
}
return dp[len];
}
};
########################################
第二次写,多了一层循环,用二维表示 i,j 能否被表示,其实只需要 1,i 是否能够被表示。