【学会动态规划】单词拆分(24)

简介: 【学会动态规划】单词拆分(24)

动态规划怎么学?

学习一个算法没有捷径,更何况是学习动态规划,

跟我一起刷动态规划算法题,一起学会动态规划!

1. 题目解析

题目链接:139. 单词拆分 - 力扣(LeetCode)

题目很好理解,就是给我们一个字典,

看是否能够用字典里的字符串拼接成他给的目标字符串 s。

2. 算法原理

1. 状态表示

dp[ i ] 表示的是从起点到 dp[ i ] 的字符串是否能被字典里的字符串拼接成,

如果成就是 true,否则就是 false

2. 状态转移方程

根据最后一个位置的情况来划分问题,

我们可以把它分成两个区间来分析,

左区间能否可以拼接成功?右区间是否是字典里的字符串?

所以我们的状态转移方程就是:

左区间 == true && 右区间存在字典中,否则就是 false

3. 初始化

为了防止越界加一个虚拟的头结点即可。

4. 填表顺序

从左往右。

5. 返回值

返回 dp 表的最后一个位置

3. 代码编写

class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) {
        unordered_set<string> st;
        for(auto e : wordDict) st.insert(e);
        vector<bool> dp(s.size() + 1);
        dp[0] = true;
        for(int i = 0; i <= s.size(); i++) {
            for(int j = 0; j < i; j++) {
                if(dp[j] && st.find(s.substr(j, i - j)) != st.end()) {
                    dp[i] = true;
                    break;
                }
            }
        }
        return dp[s.size()];
    }
};

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

相关文章
|
数据格式
51单片机--红外遥控
51单片机--红外遥控
741 0
【计算机网络】第三章 数据链路层(可靠传输)
【计算机网络】第三章 数据链路层(可靠传输)
|
机器学习/深度学习 PyTorch Go
YOLOv5的Tricks | 【Trick4】参数重结构化(融合Conv+BatchNorm2d)
这篇文章是想要记录yolov5在模型搭建过程中的一个融合模块,就是把卷积与批归一化的参数进行融合,想卷积带有批归一化的性质,使得推理过程中可以加快模型推理速度,简化整个模型结构,实现训练与推理两个阶段的解耦。
1217 0
YOLOv5的Tricks | 【Trick4】参数重结构化(融合Conv+BatchNorm2d)
|
数据挖掘
第6章 数据分析——6.3 函数的极限
第6章 数据分析——6.3 函数的极限
第6章 数据分析——6.3 函数的极限
|
SQL 分布式计算 Java
离线数仓(八)【DWD 层开发】(5)
离线数仓(八)【DWD 层开发】
|
存储 JSON 数据库
Elasticsearch 分布式架构解析
【9月更文第2天】Elasticsearch 是一个分布式的搜索和分析引擎,以其高可扩展性和实时性著称。它基于 Lucene 开发,但提供了更高级别的抽象,使得开发者能够轻松地构建复杂的搜索应用。本文将深入探讨 Elasticsearch 的分布式存储和检索机制,解释其背后的原理及其优势。
763 5
|
关系型数据库 MySQL 测试技术
MySQL性能测试(完整版)
MySQL性能测试(完整版)
1633 1
|
存储 运维 监控
Java中的实时日志分析与可视化
Java中的实时日志分析与可视化
|
存储 传感器 安全
基于51单片机的指纹锁设计
基于51单片机的指纹锁设计
234 0
ELK 圣经:Elasticsearch、Logstash、Kibana 从入门到精通
ELK是一套强大的日志管理和分析工具,广泛应用于日志监控、故障排查、业务分析等场景。本文档将详细介绍ELK的各个组件及其配置方法,帮助读者从零开始掌握ELK的使用。