代码随想录算法训练营第四十九天| 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);
    }
};
相关推荐
想吃火锅10056 小时前
【leetcode】200. 岛屿数量
算法·leetcode·职场和发展
Nil2087 小时前
leetcode 54螺旋矩阵
算法·leetcode·矩阵
evans在进步12 小时前
LeetCode 394:字符串解码——Java 单栈模拟与嵌套解析详解
java·python·leetcode
Nil20813 小时前
leetcode 189轮转数组
数据结构·算法·leetcode
吃着火锅x唱着歌13 小时前
LeetCode 3885.设计事件管理器
算法·leetcode·职场和发展
土司大王14 小时前
LeetCode hto100——字母异位词分组
java·算法·leetcode
土司大王15 小时前
LeetCode hot100——两数之和
数据结构·算法·leetcode
.道阻且长.15 小时前
7.LeetCode算法习题讲解--双指针--四数之和
算法·leetcode·职场和发展
Navigator_Z15 小时前
LeetCode //C - 1200. Minimum Absolute Difference
c语言·算法·leetcode
wabs66616 小时前
关于字符串【力扣344.反转字符串的思考】
数据结构·算法·leetcode