动态规划之单词拆分

        这次分享一道关于动态规划的leetcode,单词拆分。

单词拆分

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。

示例:
输入: s = “leetcode”, wordDict = [“leet”, “code”]
输出: true
解释: 返回 true 因为 “leetcode” 可以由 “leet” 和 “code” 拼接成。

class Solution {public boolean wordBreak(String s, List<String> wordDict) {boolean[] dp = new boolean[s.length() + 1];dp[0] = true;for(int i = 0;i <= s.length();i++){for(int j = 0;j <= i;j++){if(dp[j] && wordDict.contains(s.substring(j, i))){dp[i] = true;}}}return dp[s.length()];}
}

        先看递推公式,举个例子,字符串为"appendapple",字符串列表为[“app”,“end”,“apple”],如果已经知道字符串append可以由字符串列表中单词构成,那么只要判断apple是否包含在字符串列表中即可,因此可以有递推公式,dp[j] && wordDict.contains(s.substring(j, i))。解释一下,dp[j]表示下标0到下标j - 1这段字符串可以由字符串列表单词构成(可能有多个),剩下的只需要判断下标j到i的字符串是否出现在字符串列表中(下标j到i为一个字符串,即一个单词)。因此dp[i]的含义为以下标i - 1结尾的字符串可以(不可以)由给定的字符串列表中的单词构成,注意是i - 1,dp[i]为true,可以,dp[i]为false,则不可以。为什么是i - 1,这是由于substring方法截取字符串时区间是左闭右开的。最后是创建dp,长度为字符串长度加1,数组初始化,仅需将dp[0]初始化为true即可,为什么等会说明。
        以上述示例说明代码的执行流程,首先初始化dp[0] = true,接着进入for循环,当i = 0,j = 0时,substring(0, 0),为空。当i = 1,j = 0时,substring(0, 1),为l,不再字符串列表中,j++,substring(1, 1)为空。当i = 2,j = 0,substring(0, 2)为le,j++,substring(1, 2)为e,j++,substring(2,2)为空,均不在字符串列表中。当i = 3,j等于0,substring(0, 3)为lee,j++,substring(1, 3)为ee,substring(2,3)为e,substring(3,3)为空,均不在字符串列表中。当i = 4,j等于0,substring(0, 4)为leet,出现在字符串列表中,wordDict.contains(s.substring(j, i)结果为true,dp[j]即为dp[0],这时就涉及到dp[0]的初始化,如果初始化为false,导致dp[4]无法初始化,因此dp[0]初始化为true,因此dp[4] = true,可以判断了leet出现在字符串列表中,虽然是dp[4],但是仅判断了下标0到3,并没有包括下标4。j++,substring(1, 4)为eet,substring(2, 4)为et,substring(3, 4)为t,substring(4,4)为空,均不在字符串列表中。接着当i = 5,截取的字符串为leetc,eetc,etc,tc,c和空。接着当i = 6是,截取的字符串为leetco,eetco,etco,tco,co,o和空,接着i = 7,截取的字符串为leetcod,eetcod,etcod,tcod,cod,od,d和空,均不存在于字符串列表中。当i = 8,j = 0,截取字符串为leetcode,eetcode,etcode,tcode,,均不存在于字符串列表中。当i = 8,j = 4,substring(4, 8)截取的字符串为code,出现在字符串列表中,并且dp[4]为true,因此dp[8]为true,之后截取的字符串为ode,de,e和空,,均不存在于字符串列表中。内外层循环遍历结束,返回dp[字符串长度 + 1],leetcode长度为7,返回dp[8]为true,表示的含义是下标0-7的字符串可以由字符串列表中的单词构成。

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

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

相关文章

【技术】汉诺塔的递归问题解析及多语言实现

汉诺塔的递归问题解析及多语言实现 汉诺塔&#xff08;Hanoi Tower&#xff09;问题是一个非常经典的递归问题。它起源于一个古老的传说&#xff1a;有三个柱子和64个大小不一的金盘&#xff0c;开始时这些金盘按从小到大的顺序放在柱子A上&#xff0c;目标是在柱子B上按同样的…

Java——Java开发环境

一、JDK 1、什么是JDK JDK&#xff08;Java Development Kit&#xff0c;Java 开发工具包&#xff09;是用于开发 Java 应用程序的核心工具包。它包含了编写、编译、调试和运行 Java 程序所需的一切工具和库。JDK 是每个 Java 开发者必备的工具。 2、JDK 主要组件 JDK主要包…

HNU-计算机体系结构-实验3-缓存一致性

计算机体系结构 实验3 计科210X 甘晴void 202108010XXX 文章目录 计算机体系结构 实验31 实验目的2 实验过程2.0 预备知识2.0.1 多cache一致性算法——监听法2.0.1.1 MSI协议2.0.1.2 MESI协议2.0.1.3 本题讲解 2.0.2 多cache一致性算法——目录法2.0.2.1 有中心的目录法2.0.2…

A2B V2.0协议学习笔记(非正式版本)

一、说明 A2B全称是 Automotive Audio Bus 汽车音频总线,主要是解决传统音频总线线多、线重、成本贵等问题。 A2B V2.0总线相对V1.0主要变化点: 速率提升,高达98.304Mbps,全双工模式 编码方式,由之前的曼彻斯特编码变为QPSK(正交相移键控)编码,每个符合2bit数据,因此…

随手记:多行文本域存数据有换行,回显数据换行展示

1.在新增的时候存储数据 <el-input type"textarea"v-model"XXXX"></el-input> 2.详情页返回的数据&#xff1a; replace一顿操作确实复杂 最快的方法直接写个样式:style"white-space: pre-line" 即可行内或者class样式都可以 …

B2126 连续出现的字符

连续出现的字符 题目描述 给定一个字符串&#xff0c;在字符串中寻找第一个连续出现次数不低于 k k k 次的字符。 输入格式 2 2 2 行。第 1 1 1 行是 k k k&#xff1b;第 2 2 2 行是仅包含大小写字母的字符串。 输出格式 字符串中第一个连续出现次数不低于 k 次的字符…

Python面试宝典:Python中与动态规划和排序算法相关的面试笔试题(1000加面试笔试题助你轻松捕获大厂Offer)

Python面试宝典:1000加python面试题助你轻松捕获大厂Offer【第二部分:Python高级特性:第十二章:高级数据结构和算法:第二节:Python中实现各类高级数据结构与算法三】 第十二章:高级数据结构和算法第二节:Python中实现各类高级数据结构与算法2.3、python中与动态规划和排…

网页如何给js后台传递数字类型参数

网页无法通过get方法传递数字参数给js后台&#xff0c;就是网页端写的是数字参数&#xff0c;传递给后台也变成了数字字符串。而js对数字类型和字符串类型是不相同的。由于我们的代码是通过中间件挂载接口的&#xff0c;通过joi库检查参数。 const Joi require(joi); //注意&…

秋招突击——算法打卡——5/28——复习{Z字形变换、两数之和}——新做:{整数反转、字符串转整数}

文章目录 复习Z字形变换实现代码参考代码 两数之和复习代码 新作整数反转个人实现实现代码 参考做法字符串转换整数个人解法 分析总结 复习 Z字形变换 实现代码 这里使用了他的思想&#xff0c;但是没有用他的代码&#xff0c;虽然已经比上次简洁了&#xff0c;但是还是不够&…

【日记】终于鼓起勇气买了吹风机!(356 字)

正文 好忙。今天比昨天还要忙&#xff0c;水都没喝几口。嗯&#xff0c;好像只喝了两口。 今天补了一份印鉴卡&#xff0c;销了一个户&#xff0c;变了一个户&#xff0c;弄了一大堆资料找人签字&#xff0c;还顺带要解决一个押品的历史遗留问题。 中午睡得好香&#xff0c;都不…

如何理解和使用 this 关键字

this 关键字是许多编程语言中的一个核心概念&#xff0c;在面向对象编程&#xff08;OOP&#xff09;中尤为重要。在JavaScript、Java、C、C#等语言中&#xff0c;this 扮演着至关重要的角色。理解 this 的意义和用法&#xff0c;对于编写清晰、有效的代码至关重要。 什么是th…

超分论文走读

codeFormer 原始动机 高度不确定性&#xff0c;模糊到高清&#xff0c;存在一对多的映射纹理细节丢失人脸身份信息丢失 模型实现 训练VQGAN 从而得到HQ码本空间作为本文的离散人脸先验。为了降低LQ-HQ映射之间的不确定性&#xff0c;我们设计尽量小的码本空间和尽量短的Code…

ECS搭建2.8版本的redis

要在ECS&#xff08;Elastic Compute Service&#xff09;上手动搭建Redis 2.8版本&#xff0c;你可以按照以下步骤操作&#xff1a; 步骤1&#xff1a;更新系统和安装依赖 首先&#xff0c;登录到你的ECS实例&#xff0c;确保系统是最新的并安装必要的依赖包&#xff1a; s…

运营推广最容易被忽略的细节!用短链接推广必须要掌握这些要点!

短链接是目前很多企业进行网络推广最常用的方式之一&#xff0c;是引流转化的重要桥梁&#xff0c;很多工作者可能觉得用短链接推广&#xff0c;只需要简简单单的把生成好的短链接放上去就行&#xff0c;但是实际上有很多细节要点是需要着重注意的&#xff0c;今天小编就围绕这…

做外贸怎么给新老客户定价

通常情况下我们对于新客户的关注点要比老客户更多一些&#xff0c;大概是因为新客户的开发周期比较长而且不确定性也很大。 但是对于一些返单的老客户对比来讲&#xff0c;老客户的稳定性就会相对来说增加很多&#xff0c;如果款式规格都是固定的&#xff0c;那么老客户从选品…

[AIGC] Nginx常用变量详解

Nginx非常强大&#xff0c;其主要功能包括HTTP服务器、反向代理、负载均衡等。Nginx的配置中有许多内置的变量&#xff0c;你可以在配置文件中使用这些变量进行灵活的配置。在本篇文章中&#xff0c;我们将介绍一些Nginx中常见的变量&#xff0c;包括proxy_add_header。 常见变…

redis显示RDB error

报错问题&#xff1a;"RDB error" 是指在Redis的RDB持久化过程中出现了错误。Redis的RDB持久化是通过将内存中的数据集快照保存到磁盘中的一种方式。如果在这个过程中遇到问题&#xff0c;Redis会记录一条包含"RDB error"的日志信息。上图错误&#xff0c;…

【论文复现】——基于随机抽样与特征值法的点云平面稳健拟合方法

目录 一、算法原理1、论文概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的GPT爬虫。 一、算法原理 1、论文概述 针对点云数据含有异常值且传统拟合方法拟合结果不理想的情况,本文提出…

Go 超时退出

1、使用 time.After() 创建超时退出&chan&select 通过 time.After() 函数创建一个超时通道&#xff0c;当超时发生时&#xff0c;通道会发送一个信号。结合 select 语句&#xff0c;可以在超时时退出程序。 package mainimport ("fmt""time" )…

Java基础语法详解

Java是一种广泛使用的面向对象编程语言&#xff0c;适用于开发跨平台的应用程序。本文将详细介绍Java的基础语法&#xff0c;帮助初学者打好扎实的编程基础。 1. Java程序的结构 一个基本的Java程序通常由类和方法组成。以下是一个简单的Java程序示例&#xff1a; public cl…