前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >LeetCode 0139. 单词拆分[动态规划详解]

LeetCode 0139. 单词拆分[动态规划详解]

原创
作者头像
Yano_nankai
修改于 2021-04-12 02:58:42
修改于 2021-04-12 02:58:42
5330
举报
文章被收录于专栏:二进制文集二进制文集

题目描述

题目链接

给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。

说明:

代码语言:txt
AI代码解释
复制
拆分时可以重复使用字典中的单词。
代码语言:txt
AI代码解释
复制
你可以假设字典中没有重复的单词。

示例 1:

代码语言:txt
AI代码解释
复制
输入:s = "leetcode", wordDict = ["leet", "code"]
输出:true
解释:返回 true 因为 "leetcode" 可以被拆分成 "leet code"。

示例 2:

代码语言:txt
AI代码解释
复制
输入:s = "applepenapple", wordDict = ["apple", "pen"]
输出:true
解释:返回 true 因为 "applepenapple" 可以被拆分成 "apple pen apple"。
     注意你可以重复使用字典中的单词。

示例 3:

代码语言:txt
AI代码解释
复制
输入:s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"]
输出:false

解题思路

此题可以使用 dfs 求解,但是会超时。

定义 dpi 为从 0 到 i,是否能用 wordDict 表示。

状态转移方程为:dpi = dpj & wordSet.contains(s.substring(j + 1, i + 1))

代码

代码语言:txt
AI代码解释
复制
class Solution {
    public boolean wordBreak(String s, List<String> wordDict) {
        boolean[] dp = new boolean[s.length()];
        Set<String> wordSet = new HashSet<>(wordDict);
        for (int i = 0; i < s.length(); i++) {
            for (int j = 0; j <= i; j++) {
                if (wordSet.contains(s.substring(0, i + 1))) {
                    dp[i] = true;
                    break;
                }
                if (dp[j] && wordSet.contains(s.substring(j + 1, i + 1))) {
                    dp[i] = true;
                    break;
                }
            }
        }
        return dp[s.length() - 1];
    }
}

复杂度分析

  • 时间复杂度:记字符串 s 的长度是 n,则复杂度是 O(n^2)
  • 空间复杂度:O(n)

GitHub LeetCode 项目

项目 GitHub LeetCode 全解,欢迎大家 star、fork、merge,共同打造最全 LeetCode 题解!

Java 编程思想-最全思维导图-GitHub 下载链接,需要的小伙伴可以自取~!!!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
LeetCode - #139 单词拆分
文章链接:https://cloud.tencent.com/developer/article/2469020
Swift社区
2024/11/22
1260
LeetCode - #139 单词拆分
一天一大 leet(单词拆分)难度:中等 DAY-25
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。
前端小书童
2020/09/24
2020
一天一大 leet(单词拆分)难度:中等 DAY-25
动态规划:单词拆分
题目链接:https://leetcode-cn.com/problems/word-break/
代码随想录
2021/02/26
8690
动态规划:单词拆分
【常见题型总结】序列 DP 模板题(总结「线性 DP」和「序列 DP」本质区别)
给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。
宫水三叶的刷题日记
2023/01/03
7260
单词拆分\\
给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。
狼啸风云
2023/12/23
1370
单词拆分\\
​LeetCode刷题实战139:单词拆分
https://leetcode-cn.com/problems/word-break/
程序员小猿
2021/01/19
3970
力扣每日一刷(2023.9.14)
进阶:如果给定的数组中含有负数会发生什么?问题会产生何种变化?如果允许负数出现,需要向题目中添加哪些限制条件?
用户11097514
2024/05/31
1020
跟着leedcode刷算法 -- 字符串2
给你一个字符串 s 和一个字符串列表 wordDict 作为字典,判定 s 是否可以由空格拆分为一个或多个在字典中出现的单词。
玖柒的小窝
2021/11/07
3150
跟着leedcode刷算法 -- 字符串2
leetcode-139-单词拆分(递归超时,动归解决)
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。
chenjx85
2018/09/29
1.2K0
面试+算法之动态规划(Java):斐波那契、背包问题、走棋盘、分苹果、连续子数组最大和、秤砝码、最长公共子串、切割钢条、最长不下降子序列、最优二分搜索树、矩阵链
Dynamic programming,简称DP,动态规划,基础算法之一,维基百科的解释:
johnny666
2024/09/18
1780
【算法】leetcode算法笔记:二叉树,动态规划和回溯法
写的比较匆忙,测试用例是能全部跑通的,不过考虑内存和效率的话,还有许多需要改进的地方,所以请多指教
啦啦啦321
2019/11/20
6570
【算法】leetcode算法笔记:二叉树,动态规划和回溯法
面试必备:高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 字符串处理+动态规划 合集!
秋招接近尾声,我总结了 牛客、WanAndroid 上,有关笔试面经的帖子中出现的算法题,结合往年考题写了这一系列文章,所有文章均与 LeetCode 进行核对、测试。欢迎食用
圆号本昊
2021/09/24
5190
面试必备:高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 字符串处理+动态规划 合集!
LeetCode 0091. 解码方法[动态规划详解]
要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,"111" 可以将 "1" 中的每个 "1" 映射为 "A" ,从而得到 "AAA" ,或者可以将 "11" 和 "1"(分别为 "K" 和 "A" )映射为 "KA" 。注意,"06" 不能映射为 "F" ,因为 "6" 和 "06" 不同。
Yano_nankai
2021/03/18
5040
LeetCode 0091. 解码方法[动态规划详解]
140. 单词拆分 II
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。
张伦聪zhangluncong
2022/10/26
1790
【Leetcode】139.拆分词句
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。
Leetcode名企之路
2019/08/16
6020
【Leetcode】139.拆分词句
LeetCode 0140. 单词拆分 II[动态规划详解]
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。
Yano_nankai
2021/04/12
4390
LeetCode 0140. 单词拆分 II[动态规划详解]
Leetcode No.139 单词拆分(动态规划)
给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。
week
2021/11/29
5450
Leetcode No.139 单词拆分(动态规划)
☆打卡算法☆LeetCode 139. 单词拆分 算法解析
“给定一个字符串s和字符串列表wordDict作为字典,判断是否可以利用字典中出现的单词拼接出s。”
恬静的小魔龙
2022/08/07
5060
☆打卡算法☆LeetCode 139. 单词拆分  算法解析
【每日一题】- leetcode- 139. 单词拆分
为了找到解,我们可以检查字典单词中每一个单词的可能前缀,如果在字典中出现过,那么去掉这个前缀后剩余部分回归调用。
早起的鸟儿有虫吃
2019/09/05
8480
【每日一题】- leetcode- 139. 单词拆分
Leetcode 139. 单词拆分
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。
zhipingChen
2019/06/19
9400
推荐阅读
相关推荐
LeetCode - #139 单词拆分
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文