【面试经典 | 150】单词拆分

news2025/1/11 7:15:22

文章目录

  • Tag
  • 题目来源
  • 解题思路
    • 方法一:动态规划
  • 写在最后

Tag

【动态规划】【字符串】


题目来源

139. 单词拆分


解题思路

方法一:动态规划

定义状态

定义 dp[i] 表示字符串 si 个字符组成的字符串(s[0, ..., i-1])是否能被空格拆分成若干个在字典中出现的单词。

转移关系

dp[i]dp[j] 以及字符串 s[j, i-1] 有关,即有

KaTeX parse error: Expected 'EOF', got '&' at position 16: dp[i] = dp[j] &̲ check(s.substr…

其中 check() 表示判断参数是否在 wordDict 字符串列表中。

base case

dp[0] = true,表示初始状态即空字符串也在 wordDict 字符串列表中。

最后返回

最后返回 dp[s.size()],即使用 wordDict 字符串列表中的一个或多个单词是否可以拼接出字符串 s

实现代码

class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) {
        unordered_set<string> st;
        for (const auto& word : wordDict) {
            st.insert(word);
        }

        int n = s.size();
        vector<bool> dp(n+1);
        dp[0] = true;
        for (int i = 1; i < n+1; ++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[n];
    }
};

复杂度分析

时间复杂度: O ( n ) O(n) O(n) n n n 为字符串 s 的长度。我们一共有 O ( n ) O(n) O(n) 个状态需要计算,每次计算需要枚举 O ( n ) O(n) O(n) 个分割点,哈希表判断一个字符串是否出现在给定的字符串列表需要 O ( 1 ) O(1) O(1) 的时间,因此总时间复杂度为 O ( n 2 ) O(n^2) O(n2)

空间复杂度: O ( n ) O(n) O(n)


写在最后

如果您发现文章有任何错误或者对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度的方法,欢迎评论区交流。

最后,感谢您的阅读,如果有所收获的话可以给我点一个 👍 哦。

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

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

相关文章

0.96寸OLED屏调试 ----(二)

所需设备&#xff1a; 1、USB 转 SPI I2C 适配器&#xff1b;内附链接 2、0.96寸OLED显示模块&#xff1b; 备注&#xff1a;专业版、升级版都适用&#xff1b; 读写控制 SSD1306通过 D/C# 和 R/W# 两位来确定&#xff1a;读/写数据&#xff0c;写命令和读状态四种通信行为。…

AI智能分析网关V4数字农场智能监控方案

随着大数据时代的到来&#xff0c;数据成为国家基础性战略资源&#xff0c;加快数字化转型、以数字化谋求国际竞争新优势已成为全球普遍共识&#xff0c;利用大数据推动经济发展、优化社会治理、改善公共服务成为了世界各国的必然选择。农村为实现产业转型升级和治理创新&#…

安达发|磁性材料智能化转型必经之路之APS高级排产软件

在当今的制造业中&#xff0c;磁性材料的应用非常广泛&#xff0c;它们在电子、电力、通信、汽车等多个行业中扮演着重要角色。随着工业4.0和智能制造的推进&#xff0c;磁性材料行业也面临着智能化转型的挑战。在这一转型过程中&#xff0c;APS&#xff08;高级计划排程系统&a…

寻找旋转排序数组中的最小值

题目链接 寻找旋转排序数组中的最小值 题目描述 注意点 1 < n < 5000-5000 < nums[i] < 5000nums中的所有整数 互不相同nums原来是一个升序排序的数组&#xff0c;并进行了 1 至 n 次旋转找出并返回数组中的最小元素设计一个时间复杂度为 O(log n) 的算法解决此…

QT 二维坐标系显示坐标点及点与点的连线-通过定时器自动添加随机数据点

QT 二维坐标系显示坐标点及点与点的连线-通过定时器自动添加随机数据点 功能介绍头文件C文件运行过程 功能介绍 上面的代码实现了一个简单的 Qt 应用程序&#xff0c;其功能包括&#xff1a; 创建一个 MainWindow 类&#xff0c;继承自 QMainWindow&#xff0c;作为应用程序的…

YB5156是一款完整的单节锂离子电池采用恒定电流/恒定电压线性充电器

概述: YB5156是一款完整的单节锂离子电池采用恒定电流/恒定电压线性充电器。其底部带有散热片的SOP8封装与较少的外部元件数目使得YB5156成为便携式应用的理想选择。YB5156可以适合USB电源和适配器电源工作。由于采用了内部PMOSFET架构&#xff0c;加上防倒充电路&#xff0c;…

flutter Got socket error trying to find package nested at

flutter Got socket error trying to find package nested at xxx 报错信息&#xff1a;“Got socket error trying to find package nested at” 通常出现在Flutter尝试从pub.dev获取依赖包时&#xff0c;由于网络问题导致无法连接到pub.dev或者无法正确解析包的路径。 例如&…

linux进程间通信IPC方式

前言 Linux环境下&#xff0c;进程地址空间相互独立、彼此隔离&#xff0c;因此进程间的数据不能直接访问。如果要交换数据&#xff0c;必须要通过内核&#xff0c;在内核中开辟一块缓冲区&#xff0c;进程A把数据从用户空间拷贝到内核缓冲区&#xff0c;进程B再把数据从内核缓…

【leetcode】双“指针”

标题&#xff1a;【leetcode】双指针 水墨不写bug 我认为 讲清楚为什么要用双指针 比讲怎么用双指针更重要&#xff01; &#xff08;一&#xff09;快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数…

centos7.9安装mysql

1. 概述 官网&#xff1a;https://www.mysql.com/ MySQL是一个关系型数据库管理系统&#xff0c;由瑞典 MySQL AB 公司开发&#xff0c;MySQL是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的RDBMS (Relational Database Management S…

Linux下线程池详解与实现:提升多任务处理效率的关键

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;マイノリティ脈絡—ずっと真夜中でいいのに。 0:24━━━━━━️&#x1f49f;──────── 4:02 &#x1f504; ◀…

【教程】谈一谈 IPA 上传到 App Store Connect 的几种方法

引言 在应用开发过程中&#xff0c;将应用程序上传到 App Store Connect 是一个关键的环节。本文将探讨几种常见的 IPA 文件上传方法&#xff0c;包括 Xcode、Application Loader、altool、Appuploader以及Transporter。通过本文的介绍和指导&#xff0c;读者将能够了解不同的…

基于springboot+vue+Mysql的超市进销存系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

SpringCloud学习笔记二:服务间调用

微服务中&#xff0c;很多服务系统都在独立的进程中运行&#xff0c;通过各个服务系统之间的协作来实现一个大项目的所有业务功能。服务系统间 使用多种跨进程的方式进行通信协作&#xff0c;而RESTful风格的网络请求是最为常见的交互方式之一。 spring cloud提供的方式&#…

基于springboot实现在线拍卖系统项目【项目源码+论文说明】

基于springboot实现在线拍卖系统演示 摘要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍…

jsp指令和动作

1.page指令&#xff1a;描述页面信息 pageENcoding:软件编码 contentType&#xff1a;浏览器编码 2.include指令&#xff1a;将多个网页合成一个网页&#xff0c;静态包含网页 问题&#xff1a;1.在网页源代码中&#xff0c;会形成错误的多遍代码&#xff0c;将主页面代码和…

MySQL中如何进行多表查询

目录 一、子查询 1.什么是子查询 2.注意事项 二、联结查询 1.什么是联结 2.内部联结&#xff08;等值联结&#xff09; ①WHERE语句 ②ON语句 3.自联结 4.自然联结 5.外部联结 三、组合查询 1.什么是组合查询 2.UNION规则 *本节涉及概念来源于图灵程序设计丛书&a…

成功推出全新生成式AI的四大原则

生成式AI有望从根本上打开一扇新世界机遇的大门&#xff0c;以满足各行各业的客户需求。从提供个性化回复的对话式聊天机器人&#xff0c;到各种应用的代码&#xff0c;再到营销传播的目标内容&#xff0c;生成式AI正在彻底改变企业的运作方式。为竞相提供卓越的客户体验&#…

jupyter lab 自动补全

命令行执行&#xff1a; pip install jupyter-lsp pip install python-lsp-server[all] jupyter lab直接搜索&#xff0c;并安装&#xff0c;重启后生效

使用`scipy.stats.wasserstein_distance`来计算两个一维分布之间的Earth Mover‘s Distance (EMD)距离

在Python中&#xff0c;计算Earth Mover’s Distance (EMD)通常使用scipy库中的scipy.stats.wasserstein_distance函数&#xff0c;该函数计算的是Wasserstein距离&#xff0c;它与EMD非常相似&#xff0c;都是用来衡量两个分布之间的距离。 以下是一个简单的Python程序例子&a…