LeetCode-热题100:139. 单词拆分

题目描述

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true

**注意:**不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。

示例 1:

输入: s = “leetcode”, wordDict = [“leet”, “code”]
输出: true
解释: 返回 true 因为 “leetcode” 可以由 “leet” 和 “code” 拼接成。

示例 2:

输入: s = “applepenapple”, wordDict = [“apple”, “pen”]
输出: true
解释: 返回 true 因为 “applepenapple” 可以由 “apple” “pen” “apple” 拼接成。
注意,你可以重复使用字典中的单词。

示例 3:

输入: s = “catsandog”, wordDict = [“cats”, “dog”, “sand”, “and”, “cat”]
输出: false

提示:

  • 1 <= s.length <= 300
  • 1 <= wordDict.length <= 1000
  • 1 <= wordDict[i].length <= 20
  • s 和 wordDict[i] 仅由小写英文字母组成
  • wordDict 中的所有字符串互不相同

代码及注释

func wordBreak(s string, wordDict []string) bool {// 初始化一个 map,用于存储 wordDict 中的单词wordDictSet := make(map[string]bool)// 初始化动态规划数组,dp[i] 表示 s 的前 i 个字符是否可以被 wordDict 中的单词拆分dp := make([]bool, len(s) + 1)// 将 wordDict 中的单词加入到 wordDictSet 中for _, w := range wordDict {wordDictSet[w] = true}// 初始化,空字符串可以被拆分dp[0] = true// 遍历 s 的每个字符for i := 1; i <= len(s); i++ {// 遍历 j,0 ≤ j < ifor j := 0; j < i; j++ {// 如果 s 的前 j 个字符可以被拆分,并且 s[j:i] 存在于 wordDict 中if dp[j] && wordDictSet[s[j:i]] {// 则 s 的前 i 个字符可以被拆分dp[i] = truebreak}}}// 返回 s 是否可以被完全拆分return dp[len(s)]
}

代码解释

  1. 初始化 wordDictSet

    wordDictSet := make(map[string]bool)
    
    • 创建一个 map,用于存储 wordDict 中的单词,以便于后续快速查找。
  2. 初始化动态规划数组 dp

    dp := make([]bool, len(s) + 1)
    
    • 创建一个布尔类型的数组 dp,其中 dp[i] 表示字符串 s 的前 i 个字符是否可以被 wordDict 中的单词拆分。
  3. 将 wordDict 中的单词加入到 wordDictSet 中

    for _, w := range wordDict {wordDictSet[w] = true
    }
    
    • 遍历 wordDict,将其中的单词加入到 wordDictSet 中,以便后续快速查找。
  4. 初始化 dp[0] 为 true

    dp[0] = true
    
    • 空字符串可以被拆分,因此 dp[0] 初始化为 true
  5. 动态规划遍历

    for i := 1; i <= len(s); i++ {for j := 0; j < i; j++ {if dp[j] && wordDictSet[s[j:i]] {dp[i] = truebreak}}
    }
    
    • 使用动态规划的方法遍历字符串 s 的每个字符,对于每个字符 i,从 0i-1 的字符 j 进行遍历。
    • 如果 dp[j]true(即字符串 s 的前 j 个字符可以被拆分),并且 s[j:i] 存在于 wordDict 中,那么 dp[i] 就设置为 true
    • 使用 break 结束内层循环,因为只需要找到一个满足条件的 j 即可。
  6. 返回结果

    return dp[len(s)]
    
    • 返回 dp[len(s)],表示整个字符串 s 是否可以被完全拆分为 wordDict 中的单词。

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

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

相关文章

从MySQL5.7平滑升级到MySQL8.0的最佳实践分享

一、前言 升级需求&#xff1a;将5.7.35升级到8.0.27, 升级方式 in-place升级【关闭现有版本MySQL&#xff0c;将二进制或包替换成新版本并在现有数据目录上启动MySQL并执行升级任务的方式&#xff0c;称为in-place升级】 原版本 5.7.35 CentOS Linux release 7.9.2009 新版本…

OpenHarmony实战开发-多设备自适应能力

介绍 本示例是《一次开发&#xff0c;多端部署》的配套示例代码&#xff0c;展示了页面开发的一多能力&#xff0c;包括自适应布局、响应式布局、典型布局场景以及资源文件使用。 说明&#xff1a; 自适应布局能力仅可以保证在外部容器大小在一定范围内变化时&#xff0c;容…

✌2024/4/3—力扣—整数转罗马数字

代码实现&#xff1a; 方法一&#xff1a;硬编码数字 const char *thousands[] {"", "M", "MM", "MMM"}; const char *hundreds[] {"", "C", "CC", "CCC", "CD", "D",…

STM32无刷电机全套开发资料(源码、原理图、PCB工程及说明文档)

目录 1、原理图、PCB、BOOM表 2、设计描述 2.1 前言 2.2 设计电路规范 3、代码 4、资料清单 资料下载地址&#xff1a;STM32无刷电机全套开发资料(源码、原理图、PCB工程及说明文档) 1、原理图、PCB、BOOM表 2、设计描述 2.1 前言 经过一个星期的画PCB&#xff0c;今…

C++模仿qq界面

#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//设置窗口的大小this->resize(645,497);//设置窗口名字this->setWindowTitle("QQ");//设置窗口图标this->setWindowIcon(QIcon("C:\\zhouzhouMyfile\\qt_proj…

ChatGPT助力学术成就:打造完美论文技巧

ChatGPT无限次数:点击直达 ChatGPT助力学术成就&#xff1a;打造完美论文技巧 在当今信息爆炸的时代&#xff0c;学术研究对于每个领域的进步和发展至关重要。而在学术研究中&#xff0c;撰写高质量的论文是展示研究成果和贡献的重要方式之一。然而&#xff0c;许多学者在论文…

如何使用Excel搭建一套低值易耗品管理系统

低值易耗品是企业日常运营中不可或缺的一部分&#xff0c;虽然其单个价值不高&#xff0c;但因其使用频繁且数量众多&#xff0c;对其的管理同样重要。利用Excel搭建一套低值易耗品管理系统&#xff0c;不仅成本低廉&#xff0c;而且易于操作和维护。本文将指导您如何使用Excel…

【编程】Boost::geometry Polygon 常用应用代码记录(C++)

简介 本文的代码部分都比较简单容易 Boost Geometry 是 Boost C 库集合的一部分&#xff0c;定义了用于解决几何问题的概念、工具和算法。这个库比较常用&#xff0c;很多现成的函数都很实用且简单&#xff0c;本文记录一些常用的函数和操作&#xff0c;重复的功能以后还会用到…

python实例1.1:编写一个程序来计算并打印用户输入的数字列表的平均值(详解及其知识点拓展)

目录 一、主程序详细讲解 二、strip()和float()函数详细用法 三、try...except详细用法 四、列表用法及append使用方法详解 append() 方法 语法&#xff1a; 实例&#xff1a; 一、主程序详细讲解 下面是一个简单的Python程序&#xff0c;它可以接收用户输入的数字列表…

Rust---模式(Pattern)匹配

目录 模式是什么它用来做什么模式匹配和赋值为什么会有模式匹配模式匹配用在什么地方match 表达式if let表达式while let表达式for 循环let 语句函数参数不可驳模式匹配和可驳模式匹配模式是什么 在Rust中,模式(Pattern)是一种用于匹配和解构数据的语法结构。模式匹配中常用…

Mac运行不畅?一招教你轻松清理缓存,恢复流畅体验!

在日常使用Mac电脑时&#xff0c;面对系统运行速度下降或频繁卡顿的问题&#xff0c;不仅影响工作效率&#xff0c;用户体验也随之大打折扣。探究 Mac 运行变慢的背后原因&#xff0c;涵盖了一系列潜在因素&#xff0c;诸如存储空间接近极限、系统资源紧张、启动加载项过多等。…

LeetCode刷题--- 让字符串成为回文串的最少插入次数

让字符串成为回文串的最少插入次数 题目链接&#xff1a;让字符串成为回文串的最少插入次数 题目 给你一个字符串 s &#xff0c;每一次操作你都可以在字符串的任意位置插入任意字符。 请你返回让 s 成为回文串的 最少操作次数 。 「回文串」是正读和反读都相同的字符串。…

EN 14246:2006 吊顶石膏板检测

石膏板是建筑领域使用的一种主要产品&#xff0c;具有重量轻&#xff0c;强度较高&#xff0c;厚度较薄&#xff0c;易加工&#xff0c;绝热隔音和防火等性能&#xff0c;是目前市场上较为流行的轻型板材之一&#xff1b;主要用于墙板&#xff0c;吊顶&#xff0c;检修口等领域…

Java设计模式详解:抽象工厂模式

Java设计模式详解&#xff1a;抽象工厂模式 文章目录 Java设计模式详解&#xff1a;抽象工厂模式前言一、原理二、案例实战&#xff1a;打造一款汽车生产流水线三、使用场景四、与工厂模式的区别总结 前言 对于初学者来说&#xff0c;设计模式可能显得有些抽象和复杂&#xff…

1.4 掌握Scala运算符

大家好&#xff0c;今天我们将一起探讨Scala中的运算符。在Scala中&#xff0c;运算符实际上就是方法的一种特殊形式。这意味着我们可以像调用方法一样使用运算符。 首先&#xff0c;让我们了解一下Scala中的运算符种类。Scala支持多种类型的运算符&#xff0c;包括算术运算符…

IT廉连看——SpringBoot——SpringBoot快速入门

IT廉连看——SpringBoot——SpringBoot快速入门 1、idea创建工程 &#xff08;1&#xff09;普通Maven工程创建 工程名spring-boot-test 2、添加依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/PO…

windows7安装高版本Node

项目需要安装高版本得node&#xff0c;windows7最高支持到v13&#xff0c;需要手动下载zip安装包进行解压&#xff0c;配置环境变量&#xff0c;添加路径到path&#xff0c;如果安装了nvm需要卸载&#xff0c;否则配置得高版本node可能不生效&#xff0c;成功后如下&#xff1a…

LeetCode 24.两两交换链表中的节点

给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4] 输出&#xff1a;[2,1,4…

Mysql语句(更新)

查询框架 执行顺序select 查询列表 7from 表 1[join type] join 表2 2 on 连接条件 3where 筛选条件 4group by 分组条件 5having 分组后筛选 6or…

机器学习(Machine Learning)知识点

机器学习Machine Learning知识点 机器学习1. 常用的数据处理的库有哪些2. 常用的机器学习的库有哪些3. 过拟合问题的特点4. 过拟合问题的解决方法&#xff1a;5. 说一下广度优先遍历和深度优先遍历&#xff1f;6. 什么是线性回归?7. 机器学习中&#xff0c;有哪些损失函数&…