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

文章目录

  • 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.mzph.cn/news/776947.shtml

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

相关文章

【Node.js】模块化

概述 Nodejs 模块化规范遵循两套规范&#xff1a; Common JSES Module Common JS 引入模块&#xff08;require&#xff09;支持四种格式 支持引入内置模块例如 http os fs child_process 等const fs require(fs)&#xff0c;高版本也可以使用const fs require(node:fs…

【Java SE】封装

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. 封装1.1 封装是什么1.2 封装的意义1.3 访问修饰限定符1.3.1 在Java中如何实现封装1.3.2 各种访问修饰限定…

SpringCloud微服务集成Dubbo

1、Dubbo介绍 Apache Dubbo 是一款易用、高性能的 WEB 和 RPC 框架,同时为构建企业级微服务提供服务发现、流量治理、可观测、认证鉴权等能力、工具与最佳实践。用于解决微服务架构下的服务治理与通信问题,官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服…

【二叉树】Leetcode 230. 二叉搜索树中第K小的元素【中等】

二叉搜索树中第K小的元素 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 个最小元素&#xff08;从 1 开始计数&#xff09;。 示例1&#xff1a; 输入&#xff1a;root [3,1,4,null,2], k 1 输出&#xff1a;1 解…

在 fstab文件中配置 UUID方式自动挂载数据盘、swap、目录(**)

linux如何挂在硬盘&#xff0c;自动挂载和手动挂载&#xff08;详细说明&#xff09;https://gitcode.csdn.net/65eedcea1a836825ed7a06f4.html 解决linux重启后磁盘挂载失效的问题 https://blog.csdn.net/sugarbliss/article/details/107033034 linux /etc/fstab 文件详细说…

UG NX二次开发(C#)-通过曲线组生成NURBS曲面

文章目录 1、前言2、UG NX中通过曲线组生成NURBS曲面的操作3、采用NXOpen C#方法的源代码1、前言 在UG NX中,曲线、曲面的操作使用比较多,对于创建NURBS曲面,可以通过曲线组来生成,本文以NXOpen C#的方法实现通过曲线组生成NURBS曲面的功能。对于UG NX二次开发感兴趣或者有…

探索多种数据格式:JSON、YAML、XML、CSV等数据格式详解与比较

title: 探索多种数据格式&#xff1a;JSON、YAML、XML、CSV等数据格式详解与比较 date: 2024/3/28 17:34:03 updated: 2024/3/28 17:34:03 tags: 数据格式JSONYAMLXMLCSV数据交换格式比较 1. 数据格式介绍 数据格式是用于组织和存储数据的规范化结构&#xff0c;不同的数据格…

【aws】架构图工具推荐

碎碎念 以前以为日本冰箱论是个梗&#xff0c;结果居然是真的。用光盘传真其实还能理解&#xff08;毕竟我也喜欢电子古董2333&#xff09;&#xff0c;但是画架构图居然用的是excel&#xff0b;截图&#xff01;啊苍天呐&#xff0c;然后看到隔壁工位用excel画web原型又感觉释…

将数字城市复制到虚拟空间,如何搭建实景三维虚拟场景?

什么是实景三维&#xff1f; 实景三维&#xff08;3D Real Scene&#xff09;是一个专业术语&#xff0c;它指的是对一定范围内人类生产、生活和生态空间进行真实、立体、时序化反映和表达的数字虚拟空间。它是新型基础测绘的标准化产品&#xff0c;也是国家重要的新型基础设施…

权限提升-系统权限提升篇数据库提权PostsqlRedis第三方软件提权密码凭据钓鱼文件

知识点 1、数据库到Linux-数据库提权-Redis 3、数据库到Linux-数据库提权-PostgreSQL 4、计算机用户到系统-第三方软件-各类应用 章节点&#xff1a; 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及转移 4、域控权限提升及转移 Windows提权&#xff1a; 1、…

Linux 基于HAProxy+KeepAlived实现

Linux 基于HAProxyKeepAlived实现 1. 介绍1.1 高可用&#xff08;HA-High Avaialbility&#xff09;1.2 负载均衡&#xff08;LB-Load Balance&#xff09;1.3 HAProxy1.4 KeepAlived 2. 后端服务为Nginx2.1 系统拓扑2.2 环境说明2.3 前提条件2.4 详细步骤2.4.1 机器初始化2.4.…

Python列表、元组、字典及集合

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、列表定义方式&#xff1a; 二、元组1、定义方式&#xff1a;2、元组中的物理存储地址不可修改,如果修改则会报错&#xff0c;但是元组中的列表、字典项等却可以…

React-1-jsx基础-事件绑定-样式处理

一.JSX基础-概念和本质 1.1 什么是JSX JSX是JavaScript和XML&#xff08;HTML&#xff09;的缩写&#xff0c;表示在JS代码中编写HTML模版结构,它是React中编写UI模版的方式 优势&#xff1a; 1. HTML的声明式模版写法 2. JS的可编程能力 JSX的本质&#xff1a; JSX并不是标…

vivado 手动布线

手动路由 手动路由允许您为网络选择特定的路由资源。这给了你对信号将要采用的路由路径的完全控制。手动路由不调用route_design。路线在路线数据库中直接更新。当您想精确控制网络的延迟时&#xff0c;可能需要使用手动路由。对于例如&#xff0c;假设有一个源同步接口&#…

如何查看JVM使用的是什么垃圾收集器

文章目录 一、背景分析二、查看垃圾收集器三、理解的偏差四、深挖 demo 代码五、总结 一、背景分析 无论讨论对象的内存分配&#xff0c;还是讨论内存的回收策略或是算法&#xff0c;都需要明确指出是基于哪种垃圾收集器进行的讨论。所以&#xff0c;很自然地就想到这个问题&a…

脱敏技术!!!

什么是数据脱敏&#xff1f;&#xff1f;&#xff1f; 数据脱敏&#xff08;Data Masking&#xff09;是一种数据安全技术&#xff0c;旨在通过预先设定的规则和算法&#xff0c;对原始数据中包含的敏感信息进行变形处理&#xff0c;使得这些信息在非生产环境&#xff08;例如…

考研数学|汤家凤1800基础部分要做完吗?

我教你一个方法&#xff0c;保证让你高质量的做完1800基础部分&#xff0c;而且还不用把所有题目都做了 我当然不是教你如何投机取巧&#xff0c;投机取巧是考不了高分的&#xff0c;我教你的都是我在实际考研过程中实际运用到的方法&#xff01; 其实这个方法也是我在二战的时…

C#手术麻醉系统源码 可对接HIS LIS PACS 医疗系统各类设备 医院手麻系统源码

C#手术麻醉系统源码 可对接HIS LIS PACS 医疗系统各类设备 手术麻醉信息管理系统主要还是为了手术室开发提供全面帮助的系统&#xff0c;其主要是由监护设备数据采集子系统和麻醉临床系统两个子部分组成。包括从手术申请到手术分配&#xff0c;再到术前访视、术中记录及术后…

面试题:Java虚拟机JVM的组成

1. 基础概念 JVM是什么 Java Virtual Machine Java程序的运行环境&#xff08;java二进制字节码的运行环境&#xff09; 好处&#xff1a; 一次编写&#xff0c;到处运行 自动内存管理&#xff0c;垃圾回收机制 JVM由哪些部分组成&#xff0c;运行流程是什么&#xff1f; …

C++从入门到精通——C++输入和输出

C输入和输出 前言一、C打印Hello World二、C输入&输出关于I/O流C输入&输出cout函数cin函数endl函数 三、C输入和输出的说明printf、scanf和cout、cin的区别cout函数和cin函数控制精度和宽度std命名空间的使用惯例 前言 C中的输入和输出主要通过标准库中的iostream类实…