LeetCode刷题之HOT100之单词拆分

news2024/11/25 18:30:53

上午把docker基础学完了。下午来了闲的无聊,做一题先。

1、题目描述

在这里插入图片描述

2、逻辑分析

这个问题是一个典型的动态规划问题,我们可以使用一个布尔数组 dp 来记录字符串 s 的前缀是否可以被拆分成字典中的单词。具体地,dp[i] 表示字符串 s 的前 i 个字符(即 s.substring(0, i))是否可以被拆分成字典中的单词。

算法的基本思路是,从字符串 s 的第一个字符开始,逐步向后检查每个位置。对于每个位置 i,我们再次遍历从位置 0i-1 的所有位置 j,并检查子串 s.substring(j, i) 是否在字典中。如果 s.substring(j, i) 在字典中,并且 dp[j] 为 true(即 s 的前 j 个字符可以被拆分),那么我们就可以将 dp[i] 设置为 true

3、代码演示

public boolean wordBreak(String s, List<String> wordDict) {
        // 将字典 wordDict 转换为 HashSet,以便快速查找 
        Set<String> wordDictSet = new HashSet<>(wordDict);
        // 创建一个布尔数组 dp,dp[i] 表示 s 的前 i 个字符是否可以被拆分
        boolean[] dp = new boolean[s.length() + 1];
        // 初始化 dp[0] 为 true,因为空字符串总是可以被拆分的
        dp[0] = true;
        // 从第一个字符开始遍历到字符串末尾
        for(int i = 1; i <= s.length(); i++){
            // 从第 0 个字符到当前字符的前一个字符进行遍历(包含)
            for(int j = 0; j < i; j++){
                // 如果 s 的前 j 个字符可以被拆分(即 dp[j] 为 true)  
                // 并且 s 的从第 j 个字符到当前字符的子串在字典中
                //(即 wordDictSet.contains(s.substring(j, i)) 为 true)
                if(dp[j] && wordDictSet.contains(s.substring(j, i))){
                    // 那么 s 的前 i 个字符也可以被拆分,设置 dp[i] 为 true
                    dp[i] = true;
                    // 因为已经找到了一个拆分方式,所以可以提前跳出内层循环
                    break;
                }
            }
        }
        // 返回 s 是否可以被完全拆分,即 dp[s.length()] 是否为 true
        return dp[s.length()]; 
    }

以字符串 s = “leetcode” 和字典 wordDict = ["leet", "code"] 为例来解释这段代码。

  • 首先,我们初始化一个长度为 9 的布尔数组 dp,所有元素都初始化为 false,除了 dp[0],它表示空字符串,所以初始化为
    true
  • 然后,我们开始遍历字符串 "leetcode" 的每个字符,同时对于每个字符,我们都会遍历从当前字符到字符串末尾的每个子字符串。
  • i = 0 时,我们检查子字符串 "l", "le", "lee", "leet", "leetc", "leetco","leetcod", "leetcode"。当我们检查到 "leet" 时,我们发现 "leet" 在字典中,而且 dp[0]true,所以我们将 dp[4] 设置为 true
  • i = 1 时,我们检查子字符串 "e", "ee", "eet", "eetc", "eetco", "eetcod", "eetcode"。但是因为 dp[1]false,所以我们不会更新任何 dp[j]
  • i = 2i = 3 时,同样因为 dp[2]dp[3] 都是 false,所以我们也不会更新任何 dp[j]
  • i = 4 时,我们检查子字符串 "c", "co", "cod", "code"。当我们检查到 "code" 时,我们发现"code" 在字典中,而且 dp[4]true,所以我们将 dp[8] 设置为 true
  • 最后,我们返回 dp[8],也就是 true,表示字符串 "leetcode" 可以被拆分为字典中的单词。

4、复杂度分析

  • 时间复杂度 O ( n 2 ) O(n^{2}) O(n2)。我们一共有 O ( n ) O(n) O(n) 个状态需要计算,每次计算需要枚举 O ( n ) O(n) O(n)个分割点,哈希表判断一个字符串是否出现在给定的字符串列表需要 O ( n ) O(n) O(n)的时间,因此总时间复杂度为 O ( n 2 ) O(n^{2}) O(n2)
  • 空间复杂度 O ( n ) O(n) O(n),哈希集合和dp布尔数组需要存放元素。

over,拜拜!

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

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

相关文章

Odrivegui 、odrivetool运行时的几个问题(windows)

ODrivetool 遇到的几个问题 错误信息 Traceback (most recent call last): File “c:\Users\hpf\Desktop\import matplotlib.py”, line 1, in import matplotlib.pyplot as plt File “C:\Users\hpf\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib_…

【STM32】使用标准库点亮LED

1.硬件设计 LED1的阴极接到了PC13引脚上&#xff0c;我们控制PC13引脚的电平输出状态&#xff0c;即可控制LED1的亮灭。 2.编程要点 使能GPIO端口时钟&#xff1b;初始化GPIO目标引脚为推挽输出模式&#xff1b;编写简单测试程序&#xff0c;控制GPIO引脚输出高、低电平。 查…

数据驱动决策:工单统计工具如何赋能企业精准运营

在当今这个数字化飞速发展的时代&#xff0c;企业对于内部运营效率的追求已经达到了前所未有的高度。你是否曾为了繁杂的工单统计管理而头疼不已&#xff1f;是否曾因为无法准确进行工单统计数据而错失商机&#xff1f;今天&#xff0c;我将向你展示一款革命性的工单统计工具&a…

Python基础教程——20个让人眼前一亮的逻辑妙用!

文末免费赠精品编程资料~~ Python不仅仅是一种编程语言&#xff0c;它还是解决问题的艺术&#xff0c;充满了让人拍案叫绝的“小巧思”。通过这15个小技巧&#xff0c;你不仅能提升编程技能&#xff0c;还能让你的代码更加优雅、高效。让我们一探究竟吧&#xff01; 1. 列表推…

Thinkphp校园新闻发布系统源码 毕业设计项目实例

Thinkphp校园新闻发布系统源码 毕业设计项目实例 校园新闻发布系统模块&#xff1a; 用户模块&#xff1a;注册&#xff0c;登陆&#xff0c;查看个人信息&#xff0c;修改个人信息&#xff0c;站内搜索&#xff0c;新闻浏览等功能&#xff0c; 后台管理员模块&#xff1a;会员…

挖矿宝藏之开发者模式

目录 一、开发者模式简介 二、启动方式 三、元素&#xff08;Elements&#xff09; 四、控制台&#xff08;Console&#xff09; 五、来源&#xff08;Sources&#xff09; 六、网络&#xff08;Network&#xff09; 七、性能&#xff08;Performance&#xff09; 八、…

谷粒商城实战(043集群学习-mysql集群-分库分表)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第364p-第p365的内容 分库分表 这种基本无人用 shardingSphere shard&#xff08;碎片&#xff09; sphere &#xff08;球&#xff09; sh…

基于Spring Boot+VUE论坛管理系统

1前台首页功能模块 论坛管理系统&#xff0c;在系统首页可以查看首页、公告、热门帖子、论坛新天地、新闻资讯、留言反馈、个人中心、后台管理、客服中心等内容&#xff0c;如图1所示。 图1前台首页功能界面图 用户登录、用户注册&#xff0c;在注册页面可以填写账号、密码、昵…

手写一个JSON可视化工具

前言 JSON 平时大家都会用到&#xff0c;都不陌生&#xff0c;今天就一起来实现一个 JSON 的可视化工具。 大概长成下面的样子&#xff1a; 树展示 相比于现有的一些 JSON 格式化工具&#xff0c;我们今天制作的这个小工具会把 JSON 转为树去表示。其中&#xff1a; 橙色标…

生命在于学习——Python人工智能原理(3.5)

三、深度学习 9、常见神经网络 常见的神经网络有卷积神经网络&#xff08;AlexNet、VGGNet&#xff09;、循环神经网络&#xff08;RNN&#xff09; 长短时记忆网络&#xff08;LSTM&#xff09;。 &#xff08;1&#xff09;AlexNet AlexNet于2012年由Hinton学生Alex提出&a…

DolphinScheduler日志乱码、worker日志太多磁盘报警、版本更新导致不兼容怎么办?

作者 | 刘宇星 本文作者总结了在使用Apache DolphinScheduler过程中遇见过的常见问题及其解决方案&#xff0c;包括日志出现乱码、worker日志太多磁盘报警、版本更新导致不兼容问题等&#xff0c;快来看看有没有困扰你想要的答案吧&#xff01; DolphinScheduler集群环境有多…

背就有效!2024下《系统架构设计师》50个高频考点汇总

宝子们&#xff01;上半年软考已经结束一段时间了&#xff0c;准备备考下半年软考高级-系统架构设计师的小伙伴可以开始准备了&#xff0c;毕竟高级科目的难度可是不低的&#xff0c;相信参加过上半年架构的小伙伴深有体会。 这里给大家整理了50个高频考点&#xff0c;涵盖全书…

月薪没到20K,必啃的WebGIS系统技术栈,你练到哪一步了?

WebGIS&#xff08;网络地理信息系统&#xff09;是目前地理信息系统&#xff08;GIS&#xff09;开发的主流&#xff0c;它利用互联网技术来发布、共享和交互地理空间数据。 一个完整的WebGIS项目通常涉及以下几个主要环节&#xff1a;具备一定的理论知识&#xff0c;数据生产…

数据压缩还能这么玩,国产数据库有救了!

页级压缩 opengauss数据库是以数据页面&#xff08;Page&#xff09;为单位进行压缩解压&#xff0c;本特性自openGauss 3.0.0版本开始引入&#xff0c;通过对数据页的透明页压缩和维护页面存储位置的方式&#xff0c;做到高压缩、高性能。提高数据库对磁盘的利用率。 页级压缩…

文心一言 VS 讯飞星火 VS chatgpt (284)-- 算法导论21.2 2题

二、对定理 21.1 的整体证明进行改造&#xff0c;得到使用链表表示和加权合并启发式策略下的 MAKE-SET 和 FIND-SET 的摊还时间上界为 O(1)&#xff0c;以及 UNION 的摊还时间上界为 O(lgn)。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 在Go语言中实现使用链…

Golang——channel

channel是Go在语言层面提供的协程间的通信方式。通过channel我们可以实现多个协程之间的通信&#xff0c;并对协程进行并发控制。 使用注意&#xff1a; 管道没有缓冲区时&#xff0c;从管道中读取数据会阻塞&#xff0c;直到有协程向管道中写入数据。类似地&#xff0c;向管道…

Java快速开发:力推开源项目若依RuoYi

在Java开发开源框架中&#xff0c;首屈一指的应该若依&#xff0c;在行业里&#xff0c;不管小公司中公司还是大公司&#xff0c;都能够看到若依项目的身影。足以见得 若依框架的受众之大。 RuoYi-Cloud RuoYi-Cloud 是一个 Java EE 分布式微服务架构平台&#xff0c;基于经典…

轻兔推荐 —— who.cx

via&#xff1a;轻兔推荐 - https://app.lighttools.net/ 简介 who.cx是一个域名whois查询工具&#xff0c;界面简洁&#xff0c;可查询域名基本信息&#xff0c;注册续费价格&#xff0c;支持查看一级域名解析记录 - 对于已注册域名可以查看注册商注册时间、 过期时间等基础信…

大多数JAVA程序员都干不到35岁吗?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“666”之后私信回复“666”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 很遗憾是的&#xff0c;对…

idea2020版本下载及注册

一。准备idea2020和BetterIntelliJ插件和补丁key 二、开始安装。 idea就正常安装&#xff0c;然后打开&#xff0c;选择试用30天打开即可&#xff0c;然后File - settings - plugins 点击 Install Plugin from Disk 然后选择BetterIntelliJ这个&#xff0c;这个后期不可变名称…