LeetCode 139 —— 单词拆分

2024-05-03 16:04
文章标签 leetcode 单词 139 拆分

本文主要是介绍LeetCode 139 —— 单词拆分,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

阅读目录

    • 1. 题目
    • 2. 解题思路
    • 3. 代码实现

1. 题目

2. 解题思路

定义 d p [ i ] dp[i] dp[i] 表示 s [ 0 , i ] s[0, i] s[0,i] 是否可以被字典中出现的单词拼接,那么状态转移方程为:

d p [ i ] = t r u e ,如果存在任意  j ∈ [ 0 , i − 1 ] , 满足  d p [ j ] = t r u e ,并且  s [ j + 1 , i ] ∈ w o r d D i c t dp[i] = true,如果存在任意\space j \in [0,i-1],\\ 满足\space dp[j] =true, 并且 \space s[j+1, i] \in wordDict dp[i]=true,如果存在任意 j[0,i1]满足 dp[j]=true,并且 s[j+1,i]wordDict

也就是 s [ 0 , j ] s[0, j] s[0,j] 可以被字典中出现的单词拼接,并且 s [ j + 1 , i ] s[j+1, i] s[j+1,i] 存在于字典中,那么 s [ 0 , i ] s[0, i] s[0,i] 也可以被拼接。

同时,我们定义空字符串 d p [ − 1 ] = t r u e dp[-1]=true dp[1]=true

由于需要两层循环,所以时间复杂度为 O ( n 2 ) O(n^2) O(n2),另外,我们需要一个哈希表来存储 w o r d D i c t wordDict wordDict,所以空间复杂度为 O ( n ) O(n) O(n)

3. 代码实现

class Solution {
public:bool wordBreak(string s, vector<string>& wordDict) {vector<bool> dp(s.size(), false);unordered_map<string, bool> wordMap;for (int i = 0; i < wordDict.size(); ++i) {wordMap[wordDict[i]] = true;}for (int i = 0; i < s.size(); ++i) {for (int j = i-1; j >= -1; --j) {if (j != -1 && !dp[j]) {continue;}string sub_str = s.substr(j+1, i-j);if (wordMap.count(sub_str)) {dp[i] = true;break;}}}return dp.back();}
};

这篇关于LeetCode 139 —— 单词拆分的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/957111

相关文章

Python实现合并与拆分多个PDF文档中的指定页

《Python实现合并与拆分多个PDF文档中的指定页》这篇文章主要为大家详细介绍了如何使用Python实现将多个PDF文档中的指定页合并生成新的PDF以及拆分PDF,感兴趣的小伙伴可以参考一下... 安装所需要的库pip install PyPDF2 -i https://pypi.tuna.tsingh

基于Python实现多语言朗读与单词选择测验

《基于Python实现多语言朗读与单词选择测验》在数字化教育日益普及的今天,开发一款能够支持多语言朗读和单词选择测验的程序,对于语言学习者来说无疑是一个巨大的福音,下面我们就来用Python实现一个这... 目录一、项目概述二、环境准备三、实现朗读功能四、实现单词选择测验五、创建图形用户界面六、运行程序七、

Python进行PDF文件拆分的示例详解

《Python进行PDF文件拆分的示例详解》在日常生活中,我们常常会遇到大型的PDF文件,难以发送,将PDF拆分成多个小文件是一个实用的解决方案,下面我们就来看看如何使用Python实现PDF文件拆分... 目录使用工具将PDF按页数拆分将PDF的每一页拆分为单独的文件将PDF按指定页数拆分根据页码范围拆分

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

leetcode-24Swap Nodes in Pairs

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode swapPairs(L

leetcode-23Merge k Sorted Lists

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode mergeKLists

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

【JavaScript】LeetCode:16-20

文章目录 16 无重复字符的最长字串17 找到字符串中所有字母异位词18 和为K的子数组19 滑动窗口最大值20 最小覆盖字串 16 无重复字符的最长字串 滑动窗口 + 哈希表这里用哈希集合Set()实现。左指针i,右指针j,从头遍历数组,若j指针指向的元素不在set中,则加入该元素,否则更新结果res,删除集合中i指针指向的元素,进入下一轮循环。 /*** @param