代码随想录算法训练营第四十九天| 139.单词拆分

代码随想录算法训练营第四十九天| 139.单词拆分


### 文章目录

  • [代码随想录算法训练营第四十九天| 139.单词拆分](#文章目录 代码随想录算法训练营第四十九天| 139.单词拆分 @[toc] 139.单词拆分)
  • [@[toc]](#文章目录 代码随想录算法训练营第四十九天| 139.单词拆分 @[toc] 139.单词拆分)
  • [139.单词拆分](#文章目录 代码随想录算法训练营第四十九天| 139.单词拆分 @[toc] 139.单词拆分)

139.单词拆分

题目链接:139. 单词拆分 - 力扣(LeetCode)

题目描述:

给你一个字符串 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

提示:

  • 1 <= s.length <= 300
  • 1 <= wordDict.length <= 1000
  • 1 <= wordDict[i].length <= 20
  • swordDict[i] 仅由小写英文字母组成
  • wordDict 中的所有字符串 互不相同
cpp 复制代码
class Solution {
public:
    bool InS (const std::string& s,const std::unordered_set<std::string>& wordSet,std::vector<bool>& memory,int startIndex) {
        if (startIndex >= s.size()) {
            return true;
        }
        // 如果memory[startIndex]不是初始值了,直接使用memory[startIndex]的结果
        if (!memory[startIndex]) return memory[startIndex];
        for (int i = startIndex; i < s.size(); i++) {
            std::string word = s.substr(startIndex, i - startIndex + 1);
            if (wordSet.find(word) != wordSet.end() && InS(s, wordSet, memory, i + 1)) {
                return true;
            }
        }
        memory[startIndex] = false; // 记录以startIndex开始的子串是不可以被拆分的
        return false;
    }
    bool wordBreak(std::string s, std::vector<std::string>& wordDict) {
        std::unordered_set<std::string> wordSet(wordDict.begin(), wordDict.end());
        std::vector<bool> memory(s.size(), 1); // -1 表示初始化状态
        return InS(s, wordSet, memory, 0);
    }
};
相关推荐
_Itachi__6 小时前
LeetCode 热题 100 74. 搜索二维矩阵
算法·leetcode·矩阵
chao_7898 小时前
链表题解——两两交换链表中的节点【LeetCode】
数据结构·python·leetcode·链表
编程绿豆侠10 小时前
力扣HOT100之多维动态规划:1143. 最长公共子序列
算法·leetcode·动态规划
dying_man19 小时前
LeetCode--24.两两交换链表中的结点
算法·leetcode
yours_Gabriel19 小时前
【力扣】2434.使用机器人打印字典序最小的字符串
算法·leetcode·贪心算法
GGBondlctrl20 小时前
【leetcode】递归,回溯思想 + 巧妙解法-解决“N皇后”,以及“解数独”题目
算法·leetcode·n皇后·有效的数独·解数独·映射思想·数学思想
枫景Maple1 天前
LeetCode 2297. 跳跃游戏 VIII(中等)
算法·leetcode