首页 > 其他分享 >动态规划之单词拆分

动态规划之单词拆分

时间:2024-05-30 20:02:58浏览次数:6  
标签:substring 列表 单词 拆分 字符串 动态 true dp

        这次分享一道关于动态规划的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的字符串可以由字符串列表中的单词构成。

标签:substring,列表,单词,拆分,字符串,动态,true,dp
From: https://blog.csdn.net/qq_43552690/article/details/139282711

相关文章

  • 为什么要使用动态代理IP?
    一、什么是动态代理IP?&nbsp;&nbsp;&nbsp;&nbsp;动态代理IP是指利用代理服务器来转发网络请求,并通过不断更新IP地址来保护访问者的原始IP,从而达到匿名访问、保护隐私和提高访问安全性的目的。动态代理IP在多个领域中都有广泛的应用,能够帮助用户降低账户被封禁的风险,提......
  • vue3 require动态加载图片及动态加载svg图
    以下是本地图片及引用本地的svg图报错//这里是获取本地的png图片报错<divclass="flex-itemsswiper-item"v-for="(item,index)inlist":key="index"><imgclass="brand-img":src="require(item.url)"/></......
  • 代码随想录算法训练营第四十四天|01 背包、动态规划:01背包理论基础(滚动数组)、416. 分
    01背包文档讲解:代码随想录题目链接:46.携带研究材料(第六期模拟笔试)有n件物品和一个最多能背重量为w的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 暴力解法:每个物品都有放与不放两种状态......
  • PyTorch学习(8):PyTorch中Tensor的合并于拆分(torch.cat, torch.stack, torch.trunk, tor
    1.写在前面       在使用PyTorch执行深度学习开发时,经常会用到对Tensor的合并于拆分操作。如我们在使用CSP时,有时候会需要将Tensor拆分成两部分,其中一部分进行进行CrossStage操作,另一部分执行多重卷积操作,这个时候我们就会用到四个典型的接口,分别是torch.cat,torch......
  • 三十二、openlayers官网示例解析Draw lines rendered with WebGL——使用WebGL动态修
     官网demo地址:DrawlinesrenderedwithWebGL这个示例展示了如何用webgl渲染矢量图形并动态修改点、线属性。首先先把基本的地图加载上去initMap(){this.map=newMap({layers:[newTileLayer({source:newXYZ({......
  • 如何设计简单词法分析器 C++(面向对象)
    前言与其他教程不同,本文实现的词法分析器借鉴于C++输入流我搜过的教程基本上都是从状态转换的思想入手,虽然本文思路类似于状态转换,但也有独到之处。从面向对象的角度其他教程大多采用面向过程,二者都能解决问题,各有优劣。只不过我从面向对象的角度,给读者提供一个新......
  • 使用rem、动态vh自适应移动端
    前言这是我的模仿抖音系列文章的第六篇第一篇:200行代码实现类似Swiper.js的轮播组件第二篇:实现抖音“视频无限滑动“效果第三篇:Vue路由使用介绍以及添加转场动画第四篇:Vue有条件路由缓存,就像传统新闻网站一样第五篇:GithubActions部署Pages、同步到Gitee、翻译REA......
  • Particles.js:为Web项目增添动态粒子效果
    Particles.js:为Web项目增添动态粒子效果示例介绍Particles.js是一个轻量级的JavaScript库,用于在Web页面上创建和管理动态粒子效果。它允许开发者通过简单的配置文件实现复杂的动画效果,为网页增添视觉吸引力。粒子可以是点、线、图像等,能够根据用户交互进行动态变化,Particles.......
  • 《计算机网络微课堂》6-3 动态主机配置协议DHCP
    本节课我们介绍动态主机配置协议DHCP。我们首先来举例说明DHCP的作用。如图所示有这样一个网络拓扑,请同学们思考一下,我们应该给网络中的各主机设置怎样的网络相关配置信息,才能使他们可以正常访问网络中的WEB服务器。根据我们之前课程所介绍过的相关知识可知,需要给网络中的各......
  • [ 514. 自由之路] (动态规划)
    dp[i][j]i表示前i个字符j的选择是第i个字符在ring中出现的位置列表。给初始编号dp[i][j]=.所有(dp[i-1][k]+cost(j,k)k可选的这样的值中的最小值importjava.util.ArrayList;importjava.util.List;classSolution{intn;List<Integer>[]index=......