DP专题17 单词拆分

news2024/10/5 0:13:26

本题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题目:

思路:

        由题意,根据题目意思,给出字符串 S,以及一个字符串数组,问字符串数组中  s_{_{i}}  是否可以任取字符串拼成字符串 S。

        根据这个题目,我们可以看成完全背包问题,又因为我们选取的字符串 s_{_{i}} 可以不在乎顺序的进行选取,所以我们用 排列数的遍历方式,总结下来:  完全背包问题+排列数遍历方式

        第一步,确定dp[i] 的含义。

        这里题目要求的是判断是否可以拼成字符串 S,

        所以我们 dp 数组可以为 bool 类型的dp数组,

        当 dp [ 结果含义下标 ] 返回真就是真,返回假就是假

        其中 dp[ i ] 下标  i 的含义我们得要确定好。

        我们根据正常思维去联想   提取的字符串S 的片段   的进行判断是否存在我们的字符串数组,

其中提取字符串 S 的片段的时候,有一个因素就是 片段 S 的长度。

        所以我们可以将 dp[ i ] 下标  i 的含义定义为 字符串长度。

        当 我们 dp[ S.lenght() ] = true 的时候就是有真结果,反之。

        综上所述,我们确定好了 dp[ i ] 的全部含义了.

        dp[ i ]  为 我们求是否 可以拼成 S 的结果,   i  为 字符串长度

        第二步,确定 dp公式

        根据总结下来:  完全背包问题+排列数遍历方式

        这里   背包容量,我们可以是  S 的长度,问 '物品' 字符串选取S片段 是否符合,并且长度可以凑成 背包容量 ,既可以。

        详细遍历过程如下:

                

// 排列数遍历,先遍历背包容量,再遍历物品
for(int i = 1;i <= S.size();++i)    // S 目标拼凑成的字符串长度
{
    for(int j = 0;j < i;++j)    // 选取物品片段长度
    {
         string word = s.substr(j,i - j);    // 这里是选取字符串片段

    }
}

        确定好 dp 整个过程后,逻辑也开始清晰起来,当 我们截取的 S 字符串片段存在的时候,并且我们之前凑成的 dp[ j ] 也存在的时候,说明 当前 i 是可以凑成的。

        dp 公式如下:   dp[ i ] = bool (wordDict.find(word) == true and dp[ j ]); 

        这里可能有点疑惑,为什么要 dp [ j ] 判断,解释如下:

        

第三步,确定dp 初始化

        由 第二步 我们整个  dp  已经得到清晰的逻辑了,我们是根据 截取的字符串长度进行拼凑递推下去,直到得到结果。其中遍历顺序有个特点,就是  我们遍历字符串 S 长度的时候为什么 不是 

for(int i = 0;i <= s.size();++i)

这里就是我们 dp 初始化的关键, 我们就是  dp[ 0 ] = true  的初始化

我们为什么要 dp[ 0 ] = true 的初始化,就是因为 我们可以将 空字符串 也当作是截取的一个片段,我们空串是肯定存在的,视作为可以拼凑成的, 其它的我们得需要根据 wordDict 的存在情况进行实际的拼凑。 所以  dp[ 0 ] = true ,其它为 false

代码详解如下:

class Solution {
public:
    unordered_set<string>st; // 用于查新判断截取字符串存在情况
    bool wordBreak(string& s, vector<string>& wordDict) {
        for(string &i:wordDict) st.emplace(i);   // 提前哈希存储好我们 wordDict 存在哪些 字符串
        int len = s.size(); // 计算字符串长度
        vector<bool>dp(len + 2,false);  // 定义 截取长度字符串 dp  bool数组
        dp[0] = true;   // dp 初始化,空字符串是 true
        
        // 开始完全背包,排列数遍历法遍历 dp
        for(int i = 1;i <= len;++i) // '背包' S 字符串长度
        {
            if(dp[i]) continue;    // 小优化
            for(int j = 0;j < i;++j)    // 截取字符串的 下标
            {
                if(!dp[j]) continue;    // 小优化
                string word = s.substr(j,i - j);    // 截取字符串
                if(st.find(word) != st.end() and dp[j]) dp[i] = true; // dp 公式
            }
        }
        return dp[len]; // 返回结果
    }
};

最后提交:

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

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

相关文章

java中stream流进行遍历

在源代码转向加工到目标代码时&#xff0c;可以使用加工流代码加工 三种方式&#xff1a; 1.使用stream流的of方法 Stream.of(arr); 2.使用数组的Arrays.stream Arrays.stream(arr); 3.集合类&#xff0c;继承了Collection的.stream List<Strin…

2.2.1.1-一个关于定投的故(姿)事(势)

跳转到根目录&#xff1a;知行合一&#xff1a;投资篇 已完成&#xff1a; 1、投资&技术   1.1.1 投资-编程基础-numpy   1.1.2 投资-编程基础-pandas   1.2 金融数据处理   1.3 金融数据可视化 2、投资方法论   2.1.1 预期年化收益率   2.1.2 一个关于yaxb的…

工业相机+镜头选型及靶面、焦距计算等相关详解

工业相机镜头选型及靶面、焦距计算等相关详解 着重讲述相机的各个参数及使用意义总结相机镜头选型主要参数的推理计算 0. 工业相机相关概念简介 相机与镜头一览 工业相机与镜头实物图如下图所示&#xff1a; 常见的相机有两种供电方式&#xff1a;一种是电源线供电&#xff0…

码农维权——案例分析之违法解除劳动合同(二)

目录 一、背景 二、案例来源 三、被【非法】解除《劳动合同》后可以主张哪些诉求&#xff1f; 四、案例分析&#xff1a;违法解除劳动合同 A、公司的主张&#xff1a; B、公司的主要证据&#xff08;公司单方面提交的&#xff0c;法院不一定认可采纳&#xff09;&…

QT的绘图系统QPainterDevice与文件系统QIODevice

QT的绘图系统&#xff08;QPainterDevice&#xff09;与文件系统&#xff08;QIODevice&#xff09; 文章目录 1、Qt 的绘图系统1、QPainter的使用2、QPen(画笔&#xff09;及QBursh&#xff08;画刷&#xff09;3、手动更新窗口4、绘图设备1、四种绘图设备的 区别2、 QBitmap3…

革新区块链:代理合约与智能合约升级的未来

作者 张群&#xff08;赛联区块链教育首席讲师&#xff0c;工信部赛迪特聘资深专家&#xff0c;CSDN认证业界专家&#xff0c;微软认证专家&#xff0c;多家企业区块链产品顾问&#xff09;关注张群&#xff0c;为您提供一站式区块链技术和方案咨询。 代理合约&#xff08;Prox…

使用Go语言编写HTTP代理服务器

在Go语言中&#xff0c;编写一个HTTP代理服务器相对简单且直观。代理服务器的主要职责是接收客户端的请求&#xff0c;然后将请求转发到目标服务器&#xff0c;再将目标服务器的响应返回给客户端。下面是一个简单的示例&#xff0c;展示如何使用Go语言编写一个基本的HTTP代理服…

地方债务余额数据,Shp、excel格式,2008-2020年,含公共财政收入、支出、负债率等多个字段

基本信息&#xff1a; 数据名称: 地方债务余额数据 数据格式: Shp、excel 数据时间: 2008-2020年 数据几何类型: 面 数据坐标系: WGS84 数据来源&#xff1a;网络公开数据 数据字段&#xff1a; 序号字段名称字段说明1zfzqsl地方政府债-债券数量(只)2zfzqye地方政府…

美团收银餐饮版培训教程

硬件连接方式及介绍: 双屏收银机 收银一体机 双屏收银机连接图 收银一体机连接图 前台打印机 后厨打印机 标签打印机 前台打印机连接图 后厨打印机连接图 其它收银机配件 软件前期设置 1、机器联网 点开桌面的设置&#xff0c;点击更多&#xff0c;点击以太网&#xff0c;最上…

杭电网课笔记

技巧 1.判断得数为整数还是小数&#xff0c;可以%1&#xff0c;得数为0是整数 或者用instanceof Integer number 9; // 自动装箱 System.out.println(number instanceof Integer); // 输出&#xff1a;true 2.a * b 最大公约数 * 最小公倍数 LCM 最小公倍数 GCD 最大公…

聊聊Java虚拟机(一)—— 类加载子系统

1. 前言 ​ 虚拟机就是一款用来执行虚拟计算机指令的计算机软件。它相当于一台虚拟计算机。大体上&#xff0c;虚拟机分为系统虚拟机和程序虚拟机。系统虚拟机就相当于一台物理电脑&#xff0c;里面可以安装操作系统&#xff1b;程序虚拟机是为了执行单个计算机程序而设计出来…

FPGA之分布式RAM(2)

1) 128 X1 Single Port Distributed RAM 下图中可以看出来,通过2个LUT的组合使用可以串联实现更大深度的分布式RAM.下图中出现了F7BMUX的加入, F7BMUX可以用于LUT输出的选通. 原语调用&#xff1a; RAM128XIS#(INIT(128h00000000000000000000000000000000) // Initial conten…

动态规划——炮兵回城【集训笔记】

题目描述 游戏盘面是一个m行n列的方格矩阵&#xff0c;将每个方格用坐标表示&#xff0c;行坐标从下到上依次递增&#xff0c;列坐标从左至右依次递增&#xff0c;左下角方格的坐标为(1,1)&#xff0c;则右上角方格的坐标为(m,n)。 游戏结束盘上只剩下一枚炮兵没有回到城池中&a…

ERP系统哪个好用?用友,金蝶,ORACLE,SAP综合测评

ERP系统哪个好用&#xff1f;用友&#xff0c;金蝶&#xff0c;ORACLE&#xff0c;SAP综合测评 ERP领域SAP、ORACLE相对于国内厂商如用友、金蝶优势在哪&#xff1f; SAP&#xff0c;ORACLE操作习惯一般国人用不惯&#xff1b;相对于国产软件&#xff0c;界面也很难看&#x…

深入理解C语言(2):字符、字符串与内存函数

文章主题&#xff1a;字符、字符串与内存函数&#x1f30f;所属专栏&#xff1a;深入理解C语言&#x1f4d4;作者简介&#xff1a;更新有关深入理解C语言知识的博主一枚&#xff0c;记录分享自己对C语言的深入解读。&#x1f606;个人主页&#xff1a;[₽]的个人主页&#x1f3…

buctoj——2024寒假集训 进阶训练赛 (五)

问题 A: 约瑟夫问题 题目描述 N个人围成一圈&#xff0c;从第一个人开始报数&#xff0c;数到M的人出圈&#xff1b;再由下一个人开始报数&#xff0c;数到M的人出圈&#xff1b;……输出依次出圈的人的编号。N&#xff0c;M由键盘输入。 输入 一行&#xff0c;包含两个正整数…

C++中命名空间、缺省参数、函数重载

目录 1.命名空间 2.缺省参数 3.函数重载 1.命名空间 在C中定义命名空间我们需要用到namespace关键字&#xff0c;后面跟上命名空间的名字&#xff0c;结构框架有点类似结构体&#xff08;如图所示&#xff09; 上面的代码我一一进行讲解&#xff1a; 1.我们先来说第三行和main函…

shopee智利选品:如何在Shopee智利站点上进行有效的选品

在Shopee智利站点进行选品时&#xff0c;卖家需要采取一系列策略来提高产品的市场接受度和销售潜力。以下是一些建议&#xff0c;可以帮助卖家在Shopee智利站点上进行有效的选品。 先给大家推荐一款shopee知虾数据运营工具知虾免费体验地址&#xff08;复制浏览器打开&#xf…

多场景建模:阿里多场景多任务元学习方法M2M

multi-scenario multi-task meta learning approach (M2M) 背景 广告领域大部分是针对用户建模的&#xff0c;像点击率预估&#xff0c;很少有针对广告主需求建模&#xff08;广告消耗预估、活跃率/流失率预估、广告曝光量预估&#xff09;&#xff0c;广告的类型较多&#x…

GPU与SSD间的P2P DMA访问机制

基于PCIe&#xff08;Peripheral Component Interconnect Express&#xff09;总线连接CPU、独立GPU和NVMe SSD的系统架构。 在该架构中&#xff0c;PCIe Swicth支持GPU与SSD之间快速的点对点直接内存访问&#xff08;peer-to-peer, p2p DMA&#xff09;。通常情况下&#xff0…