/*动态规划法。
设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()];
}
};LeetCode之Word Break
最新推荐文章于 2023-06-01 11:39:37 发布
本文介绍了一种使用动态规划方法解决单词拆分问题的有效算法。该算法通过维护一个布尔类型的动态规划数组来记录字符串中每个位置之前的部分是否能被字典中的单词覆盖。对于每个位置,算法检查所有可能的子串,如果某个子串存在于字典中并且前面的部分已经被标记为可覆盖,则当前位置也被标记为可覆盖。
1580

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



