怎么黑掉网站,网站建设产品话术,轻量云做网站怎么样,网站建设价格比较题目 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意#xff1a;不要求字典中出现的单词全部都使用#xff0c;并且字典中的单词可以重复使用。 示例 1#xff1a; 输入: s “leetcode”, wordDict [“leet…题目 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意不要求字典中出现的单词全部都使用并且字典中的单词可以重复使用。 示例 1 输入: s “leetcode”, wordDict [“leet”, “code”] 输出: true 解释: 返回 true 因为 “leetcode” 可以由 “leet” 和 “code” 拼接成。 示例 2 输入: s “applepenapple”, wordDict [“apple”, “pen”] 输出: true 解释: 返回 true 因为 “applepenapple” 可以由 “apple” “pen” “apple” 拼接成。 注意你可以重复使用字典中的单词。 示例 3 输入: s “catsandog”, wordDict [“cats”, “dog”, “sand”, “and”, “cat”] 输出: false
解题思路 本题可用回溯法或动态规划法。此处给出动态规划解法字典中的单词可以重复使用说明本题是完全背包问题字符串s相当于背包wordDict相当于物品。递推公式为当i-j1的字符会出现在字典中且dp[j]true时dp[i]一定为true。初始化dp[0]true.最后返回dp[n]即为最后结果。
代码实现
class Solution {
public:bool wordBreak(string s, vectorstring wordDict) {int n s.size();vectorbool dp(n1,false);unordered_setstring word_set(wordDict.begin(), wordDict.end());dp[0] true;for (int i0;in;i) {for (int j0;ji;j) {string word s.substr(j, i - j); if (word_set.find(word)!word_set.end() dp[j]) {dp[i] true;}}}return dp[n];}
};