【LeetCode】139. 单词拆分(普通)——代码随想录算法训练营Day46

题目链接:139. 单词拆分

题目描述

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true

注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。

示例 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
  • s 和 wordDict[i] 仅由小写英文字母组成
  • wordDict 中的所有字符串 互不相同

文章讲解:代码随想录

视频讲解:动态规划之完全背包,你的背包如何装满?| LeetCode:139.单词拆分_哔哩哔哩_bilibili

题解1:动态规划

思路:这是一个完全背包问题,字符串的长度为背包容量,字典为物品,求解物品的排列能否装满背包。

动态规划分析:

  • dp 数组以及下标的含义:dp[j] 代表从 s 的头部截取长度为 j 的字符串能否由字典组成。
  • 递推公式:dp[j - wordDict[i].length] 为 true 时,dp[j] = dp[j - wordDict[i].length]。
  • dp 数组初始化:dp[0] 初始化为 true,为了保证取最小的结果正确,后续元素需初始化为 false。
  • 遍历顺序:本题求排列,应先遍历背包,再遍历物品。
  • 打印 dp 数组:以输入 s = "leetcode"、wordDict = ["leet","code"] 为例,dp 数组为 [ true, false, false, false, true, false, false, false, true ]。
/*** @param {string} s* @param {string[]} wordDict* @return {boolean}*/
var wordBreak = function(s, wordDict) {const dp = new Array(s.length + 1).fill(false);dp[0] = true;for (let j = 0; j <= s.length; j++) {for (let i = 0; i < wordDict.length; i++) {if (j >= wordDict[i].length && s.substring(0, j).endsWith(wordDict[i]) && dp[j - wordDict[i].length]) {dp[j] = true;}}}return dp[s.length];
};

分析:令 n 为 wordDict 的长度,m 为 s 的长度,则时间复杂度为 O(n * m²),空间复杂度为 O(m)。

题解2:回溯法

思路:使用回溯法求解分割问题,使用记忆化递归优化速度。

/*** @param {string} s* @param {string[]} wordDict* @return {boolean}*/
var wordBreak = function(s, wordDict) {const set = new Set(wordDict);const memory = []; // 保存每次计算的以 start 起始的计算结果const backtracking = function (start) {if (start === s.length) {return true;}// 如果 memory[start] 不是未定义了,直接使用 memory[start] 作为结果if (memory[start] !== undefined) {return memory[start];}for (let i = start; i < s.length; i++) {if (set.has(s.substring(start, i + 1)) && backtracking(i + 1)) {return true;}}memory[start] = false; // 记录以 startIndex 开始的子串是不可被拆分的return false;}return backtracking(0);
};

分析:时间复杂度为 O(2 ^ n),空间复杂度为 O(n)。

收获

练习完全背包问题的求解,理解不同遍历顺序的区别。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/709296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

010 Linux 进程间通信_匿名管道

前言 本文将会向你介绍匿名管道的原理以及用法&#xff0c;以及管道的使用存在的情况和管道的特性 文章重点 重点&#xff1a;匿名管道的原理&#xff0c;使用情况&#xff0c;以及特性 进程间通信 进程间通信的本质&#xff1a; 让不同的进程先看到同一份资源&#xff0c…

c#使用log4net的3种调用方法

https://blog.csdn.net/summer_top/article/details/107961245 第一步&#xff1a;下载log4net。 右键项目引用&#xff0c;进入管理NuGet包。 搜索log4net&#xff0c;下载安装。 第二步&#xff1a;创建LogHelper类。 public class LogHelper { private LogHelp…

部署PhotoMaker通过堆叠 ID 嵌入自定义逼真的人物照片

PhotoMaker只需要一张人脸照片就可以生成不同风格的人物照片&#xff0c;可以快速出图&#xff0c;无需额外的LoRA培训。 安装环境 python 3.10gitVisual Studio 2022 安装依赖库 git clone https://github.com/bmaltais/PhotoMaker.git cd PhotoMaker python -m venv venv…

C++_STL使用手册

STL基础 STL全称为 standard template library&#xff0c;中文可译为标准模板库或者泛型库&#xff0c;其包含有大量的模板类和模板函数&#xff0c;是 C 提供的一个基础模板的集合;STL由容器、算法、迭代器、函数对象、适配器、内存分配器这 6 部分构成&#xff0c;其中后面…

为什么这么多项目经理选择考取PMP证书?

PMP认证是目前国际上项目管理领域认可度和含金量最高的证书。通过PMP就证明你的项目管理水平达到了国际标准&#xff0c;有能力从事项目管理工作&#xff0c;普通人需要很多年才能积累悟出的职场做事逻辑&#xff0c;学一个PMP就搞定了。考证花的钱&#xff0c;持证后加薪分分钟…

错误:comparison method violates its general contract

java.lang.IllegalArgumentException: 比较方法违反了其通用约定&#xff01; Java中的Comparator接口指定了比较方法应遵循以下规则&#xff1a; 自反性&#xff1a;compare(a, a) 应返回 0。 对称性&#xff1a;如果 compare(a, b) 返回一个正值&#xff0c;那么 compare(b…

Java必须掌握的static-静态方法和工具类(含面试大厂题和源码)

在Java中&#xff0c;static 关键字可以用来声明静态方法和静态变量。静态方法属于类&#xff0c;而不是类的任何特定对象实例。这意味着你可以在没有创建类的实例的情况下调用静态方法。静态方法通常用于工具类&#xff0c;这些工具类包含了一组有用的方法&#xff0c;它们可以…

传感器为智能化基础,L3车规落地打开激光雷达新空间(下)

3 L3车规落地打开激光雷达新空间&#xff0c;未来进一步迭代降本 3.1 技术落地&#xff0c;智能驾驶迈入L3关键节点 L3是区分辅助驾驶与智能驾驶的关键节点&#xff0c;L0-L2“人为主、车为辅”&#xff0c;L3之后“车为主、人为辅”。随着技术持续升级&#xff0c;智能驾驶…

洛谷 P2249 【深基13.例1】查找

思路&#xff1a;这是最典型和基础的二分查找题&#xff0c;因为符合单调性和有界性&#xff0c;如果直接暴力查找的话&#xff0c;会超时&#xff0c;只需要用一下二分即可 左边界为&#xff1a;0&#xff08;因为编号最小为1&#xff09; 右边界为&#xff1a;n1&#xff0…

spark基础内容总结

spark是master-worker结构的&#xff0c;master负责资源调度&#xff0c;类似RM&#xff0c;worker掌握所在节点的信息&#xff0c;类似于NM。 执行时候物理结构分为driver-executor&#xff0c; driver负责执行mian方法&#xff0c;将程序转为job&#xff1b;负责在executor之…

LeetCode # 206. 反转链表

206. 反转链表 题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1] 示例…

Java SpringBoot 获取 yml properties 自定义配置信息

Java SpringBoot 获取 yml properties 自定义配置信息 application.yml server:port: 9090servlet:context-path: /app第一种方法 HelloController package com.zhong.demo01.controller;import org.springframework.beans.factory.annotation.Value; import org.springfram…

qt5与qt6的cmake区别

文章目录 使用cmake构建qt项目&#xff0c;坑很多。一是本身就麻烦&#xff0c;二是&#xff0c;确实坑&#xff0c;因为不同的qtcreator版本&#xff0c;选了不同的kits&#xff08;套件&#xff09; 生成的CMakeList.txt文件也不一样。 如果可以的话都选择Qt6的相关选项&…

人工智能到深度学习:药物发现的机器智能方法(综述学习)

Artificial intelligence to deep learning: machine intelligence approach for drug discovery - PubMed (nih.gov) 人工神经网络、深度神经网络、支持向量机、分类和回归、生成对抗网络、符号学习和元学习是应用于药物设计和发现过程的算法的例子。人工智能已应用于药物设计…

【Spring】回顾反射机制

一、分析方法四要素 package org.qiu.reflect;/*** author 秋玄* version 1.0* email qiu_2022aliyun.com* project Spring* package org.qiu.reflect* date 2022-11-11-17:26* since 1.0*/ public class SomeService {public void doSome(){System.out.println("public …

森林监测VR虚拟情景再现系统更便利

AI人工智能技术已经逐渐渗透到各个领域&#xff0c;为我们的生活带来了诸多便利。在虚拟仿真教学领域&#xff0c;AI技术的应用也日益丰富&#xff0c;为虚拟情景交互体验带来了前所未有的好处。 提高VR虚拟情景的逼真度 通过深度学习和计算机视觉等技术&#xff0c;AI/VR虚拟现…

Vue3 + xterm + eventSource

xterm 是一个使用 typescript 编写的前端终端组件&#xff0c;可以在浏览器中实现一个命令行终端应用&#xff0c;通常与 websocket一起使用。 一、安装 pnpm install xterm or yarn add xterm or pnpm install xterm二、代码实现: 实现日志展示 <template><a-modal…

从 0 到 1 搭建亿级商品 ES 搜索引擎

建设并维护一个亿级的搜索引擎并非易事&#xff0c;也不存在一劳永逸的最优治理方法。本文是在实践中不断学习和总结的成果&#xff0c;介绍了如何搭建一个可支持从千万级到亿级商品量级的搜索系统&#xff0c;并实现查询总 QPS 从百级增长到千级&#xff0c;写入总 QPS 从百级…

jvm中的cms垃圾回收器和G1垃圾回收器有什么区别

JVM&#xff08;Java虚拟机&#xff09;中的CMS&#xff08;Concurrent Mark-Sweep&#xff09;垃圾回收器和G1&#xff08;Garbage-First&#xff09;垃圾回收器是两种不同的垃圾回收器&#xff0c;它们在处理内存管理和垃圾回收时有一些区别。 工作原理&#xff1a; CMS&…