【算法】【动规】单词拆分


跳转汇总链接

👉🔗算法题汇总链接


1.4 单词拆分

🔗题目链接

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。
注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。

  1. 状态表示
    • 本题依旧以 s 字符串上 i 位置为结尾作为一个状态。这个状态还能分成两部分,将最后一部分的开头设做 j 位置:[0, j) 能被字典中的词拼出来 + [j, i] 是在字典中的词,以这样分析,如果有一种情况下这两部分都是满足的,这个 i 位置就可以设成 true 了。
    • dp[i] 表示以 i 位置为结尾的字符串能否被字典中的单词拼出来。
  2. 状态转移方程
    • 这里的位置划分明显有两个变量 i 和 j

      有 0 < j <= i
      
    • 分析 i 位置的状态转移方程

      dp[i] = if (dp[j] == true && s.substr(j, i-j) 在 wordDict 中), trueelse, false
      
  3. 初始化
    • 表头添加一个元素,初始化为 true
    • 对 s 字符串也添加一个占位符在前面,便于访问原始数据
  4. 填表顺序
    • 从左往右依次填写
  5. 返回值
    • dp 表的末尾值

🐎 代码如下:
(下面还有优化版本)

class Solution {
public:bool IsInDict(const string& str, const vector<string>& wordDict){for(auto e : wordDict){if (str == e){return true;}}return false;}bool wordBreak(string s, vector<string>& wordDict) {int n = s.size();vector<int> dp(n + 1);dp[0] = 1;s = 'x' + s;for(int i = 1; i < n + 1; i++){for(int j = 1; j <= i; j++){if(dp[j-1] == 1 && IsInDict(s.substr(j, i-j+1), wordDict)){dp[i] = 1;break;}}}return dp[n];}
};



这里 IsInDict 的实现是不是有点傻?字典查询,属于“在不在”问题,用 hash 怎么样~

class Solution {
public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string> hash;for(auto e : wordDict) hash.insert(e);int n = s.size();vector<bool> dp(n + 1); // bool在vector中默认值是0,跟int一样啦dp[0] = true;           // 保证后续结果正确s = 'x' + s;            // 保持统一,方便读取原数据for(int i = 1; i < n + 1; i++){for(int j = 1; j <= i; j++){if(dp[j-1] == 1 && hash.count((s.substr(j, i-j+1)))){dp[i] = true;break;}}}return dp[n];}
};

🥰如果本文对你有些帮助,欢迎👉 点赞 收藏 关注,你的支持是对作者大大莫大的鼓励!!(✿◡‿◡) 若有差错恳请留言指正~~


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

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

相关文章

飞轮储能一次调频并网三机九节点系统,虚拟惯性和下垂控制,也可加入虚拟同步机VSG控制,飞轮储能容量可调,系统频率50Hz,离散模型

5MW飞轮储能一次调频并网三机九节点系统&#xff0c;虚拟惯性和下垂控制&#xff0c;也可加入虚拟同步机VSG控制&#xff0c;飞轮储能容量可调&#xff0c;系统频率50Hz&#xff0c;离散模型&#xff0c;仿真运行速度快。 飞轮储能变流器采用双PWM环设计&#xff0c;并网电压电…

优先考虑静态成员类

在Java中&#xff0c;静态成员类&#xff08;static nested class&#xff09;是一种嵌套在另一个类中的类&#xff0c;且被声明为静态。静态成员类不依赖于外部类的实例&#xff0c;可以直接通过外部类的类名来访问。 优先考虑使用静态成员类的情况通常是当这个类与外部类的实…

ShenYu网关注册中心之HTTP注册原理

文章目录 1、客户端注册流程1.1、读取配置1.1.1、用于注册的 HttpClientRegisterRepository1.1.2、用于扫描构建 元数据 和 URI 的 SpringMvcClientEventListener 1.2、扫描注解&#xff0c;注册元数据和URI1.2.1、构建URI并写入Disruptor1.2.2、构建元数据并写入Disruptor1.2.…

【系统架构】集群、分布式概念及系统架构演进过程

集群、分布式概念&#xff1a; 对食物没有太高要求的人在肚子饿的时候一般都会选择去兰州拉面、沙县小吃等小饭馆&#xff0c;这类小饭馆有个很显著的特点&#xff1a;洗菜、切菜、炒菜都是同一个人完成&#xff0c;如果厨子不舒服可能饭馆还会歇业。而一些人流量较大的饭馆的分…

Axure的动态面板

目录 动态面板 什么是Auxre动态模板 动态模板的步骤 应用场景 实战案例 轮播图 多功能登录界面 主界面左侧菜单栏 动态面板 什么是Auxre动态模板 动态面板是Axure中的一个重要功能&#xff0c;它允许用户创建可交互的页面&#xff0c;并模拟用户与页面的交互。通过添加元素…

智能守护,数据安全稳中求胜!上海迅软DSE助力家具家电行业引领潮流!

随着中国经济的蓬勃发展&#xff0c;家具家电企业正迎来“精品制造”的时代&#xff0c;业内竞争日益激烈。为了提升产品竞争力、扩大市场占有率&#xff0c;企业亟需加强对自主品牌的安全建设&#xff0c;确保品牌的自主知识产权、产品生产资料以及销售信息等核心数据不受泄漏…

文本处理工具doctran(集成LLM和NLP库)

今天给大家推荐一款文本处理工具&#xff0c;可以Extract、Redact、Summarize、Refine、Translate、Interrogate&#xff0c;这个工具就是文档转换框架doctran。 欢迎关注公众号 doctran基于OpenAI的GPT模型和开源的NLP库来剖析文本数据。该工具也可以在LangChain框架document…

【HDFS】DFSPacket中lastPacketInBlock字段的关键作用

这篇文章介绍了DFSPacket对象的lastPacketInBlock字段相关的知识。 【HDFS Client】DFSPacket对象什么情况下是lastPacketInBlock? 本文继续深挖lastPacketInBlock这个字段在HDFS Client写数据时的重要作用。 可以这么说,如果这个lastPacketInBlock出问题的话,是会影响增量…

android 13.0 Launcher3禁止拖拽app图标到第一屏

1.概述 在13.0系统rom进行定制化开发Launcher3中,会对Launcher3 做些要求,比如现在的需求就是Launcher3第一屏的图标固定,不让其他屏的图标拖动到 第一屏所以说这个需求和 禁止拖拽图标到Hotseat类似,也是从WorkSpace.java里面寻找解决方案,然后实现相关功能 2.Launcher…

力扣64. 最小路径和

动态规划 思路&#xff1a; 假设 dp[i][j] 为 第 i 行、第 j 列的最小路径和&#xff1b;因为只能向右或者向下移动&#xff0c;所以状态转移方程&#xff1a; dp[i][j] min(dp[i - 1][j], dp[i][j - 1]) v[i][j]当 i 0 时&#xff0c;即第一行&#xff0c;只能向右移动&am…

【MODBUS】Modbus是什么?

Modbus协议&#xff0c;从字面理解它包括Mod和Bus两部分&#xff0c;首先它是一种bus&#xff0c;即总线协议&#xff0c;和12C、SP|类似&#xff0c;总线就意味着有主机&#xff0c;有从机&#xff0c;这些设备在同一条总线上。 Modbus支持单主机&#xff0c;多个从机&#xf…

Python (八)网络编程

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一份大厂面试资料《史上最全大厂面试题》&#xff0c;Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

​sys --- 系统相关的形参和函数​

该模块提供了一些变量和函数。这些变量可能被解释器使用&#xff0c;也可能由解释器提供。这些函数会影响解释器。本模块总是可用的。 sys.abiflags 在POSIX系统上&#xff0c;以标准的 configure 脚本构建的 Python 中&#xff0c;这个变量会包含 PEP 3149 中定义的ABI标签。…

最新CRMEB商城源码开源版v5.2.2版本+前端uniapp

CRMEB开源商城系统是一款全开源可商用的系统&#xff0c;前后端分离开发&#xff0c;全部100%开源&#xff0c;在小程序、公众号、H5、APP、PC端都能用&#xff0c;使用方便&#xff0c;二开方便&#xff01;安装使用也很简单&#xff01;使用文档、接口文档、数据字典、二开文…

java中 map和 json 字符串 互转

依赖包&#xff1a; <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId> </dependency>包&#xff1a; import com.fasterxml.jackson.core.JsonProcessingException; import com.fa…

鸿蒙(HarmonyOS)应用开发——保存应用数据(题目答案)

判断题 1.首选项是关系型数据库 错误(False) 2.应用中涉及到Student信息&#xff0c;如包含姓名&#xff0c;性别&#xff0c;年龄&#xff0c;身高等信息可以用首选项来存储。 错误(False) 3.同一应用或进程中每个文件仅存在一个Preferences实例。 正确(True) 单选题 …

边缘检测@获取labelme标注的json黑白图掩码mask

import cv2 as cv import numpy as np import json import os from PIL import Imagedef convertPolygonToMask(jsonfilePath):

探秘闭包:隐藏在函数背后的小秘密(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

LeetCode1143.最长公共子序列

这道题看完就大概知道要用动态规划&#xff0c;然后想想如何建立动态转移方程&#xff0c;就很简单了&#xff0c;我都感觉我不是想出来的&#xff0c;是根据直觉应该是这样的然后边想边写就出来&#xff0c;以下是我的代码&#xff1a; class Solution {public int longestCom…

【Java】线程池的创建

目录 ​编辑 一、什么是线程池 二、创建和使用 导入必要的包&#xff1a; 创建线程池&#xff1a; 提交任务给线程池执行&#xff1a; 自定义Runnable和Callable任务&#xff1a; 关闭线程池&#xff1a; 我的其他博客 一、什么是线程池 在Java中&#xff0c;线程池是…