任务描述 本关任务: 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 说明: 拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。生成c++代码解决
时间: 2024-10-01 16:04:26 浏览: 32
在C++中,你可以使用集合(如STL中的set)来存储字典中的单词,并采用动态规划的方法来检查字符串`s`能否由字典中的单词组成。以下是基本的解决方案:
```cpp
#include <unordered_set>
#include <string>
#include <vector>
bool wordBreak(std::string s, std::vector<std::string>& wordDict) {
std::unordered_set<std::string> dict(wordDict.begin(), wordDict.end()); // 将字典转为集合
std::vector<bool> dp(s.size() + 1); // 初始化dp数组,长度为s+1,用于存储子字符串是否能由字典单词组成
dp[0] = true;
for (size_t i = 1; i <= s.length(); ++i) { // 遍历字符串s
for (size_t j = i; j > 0; --j) { // 从i开始向左回溯
if (dict.find(s.substr(j - 1, i - j)) != dict.end() && dp[j - 1]) { // 如果子串在字典中且之前的部分可行
dp[i] = true; // 更新当前状态为可行
break;
}
}
}
return dp[s.length()]; // 返回最后一个元素,表示整个字符串是否能被拆分
}
阅读全文