// 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;
}
};
leetcode 139 单词拆分 一维dp
最新推荐文章于 2025-07-14 20:26:19 发布
该博客讨论了一个使用动态规划算法解决字符串是否能由给定的单词字典拆分的问题。代码中定义了`wordBreak`和`match`两个函数,通过遍历和匹配实现字符串的拆分判断。动态规划的思路是,从字符串的起始位置开始,逐步检查是否可以找到匹配的单词。若找到,则更新状态数组`dp`。

360

被折叠的 条评论
为什么被折叠?



