代码随想录算法训练营第四十九天| 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);
    }
};
相关推荐
CV工程师小林6 小时前
【算法】BFS 系列之边权为 1 的最短路问题
数据结构·c++·算法·leetcode·宽度优先
天玑y7 小时前
算法设计与分析(背包问题
c++·经验分享·笔记·学习·算法·leetcode·蓝桥杯
sjsjs117 小时前
【数据结构-一维差分】力扣1893. 检查是否区域内所有整数都被覆盖
数据结构·算法·leetcode
m0_571957587 小时前
Java | Leetcode Java题解之第406题根据身高重建队列
java·leetcode·题解
山脚ice8 小时前
【Hot100】LeetCode—72. 编辑距离
算法·leetcode
鱼跃鹰飞9 小时前
Leetcode面试经典150题-349.两个数组的交集
算法·leetcode·面试
大二转专业10 小时前
408算法题leetcode--第七天
考研·算法·leetcode
戊子仲秋12 小时前
【LeetCode】每日一题 2024_9_19 最长的字母序连续子字符串的长度(字符串,双指针)
算法·leetcode·职场和发展
程序猿练习生15 小时前
C++速通LeetCode中等第5题-无重复字符的最长字串
开发语言·c++·leetcode
MogulNemenis17 小时前
力扣150题——位运算
数据结构·算法·leetcode