139.单词拆分

440 篇文章 5 订阅
订阅专栏

题目

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/word-break
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

示例

 

思路

1.动态规划,创建一个dp[n]记录s中第i个字符之前的在字典中是否匹配,匹配成功记录为1,不匹配或者没有匹配记录为0

循环遍历s,更新s数组中每个字符的匹配情况,并记录在dp[i]中,因为不匹配成功就记录为0,所以创建dp是就初始化为0,只有当匹配成功时才更新dp[i]

最后判断dp[n]是否为1,是说明n之前的字符都可以匹配。否说明n之前有没有不匹配的

2.递归,剪枝,也可以利用递归,每次将匹配成功之后,将前面的字符串剪去,剩余的字符递归再进行比较,最后返回是否匹配

代码

/*
*wordBreak:利用字典查找字符串子串
char * s:字符串
char ** wordDict:字典
int wordDictSize:字典长度
返回值:存在返回true,不存在返回false
*/
bool wordBreak(char * s, char ** wordDict, int wordDictSize){
   int sLen = strlen(s);
   int dp[sLen + 1];
   memset(dp , 0 , sizeof(dp));
   dp[0] = 1;
   int k;
   int wordLen;
   int i,j;
   for(i = 1; i <= sLen; i++)
   {
       for(j = 0; j < wordDictSize; j++)
       {
           wordLen = strlen(wordDict[j]);
           k = i - wordLen;
           if(k < 0)
           {
               continue;
           }
           int m = strncmp(s + k , wordDict[j],wordLen);
           if(!m)
           {
                dp[i] = (dp[k] && 1) || dp[i];              
           }
       }
   } 
   return dp[sLen] == 1 ? true : false;
}

时间空间复杂度

 

139. 单词拆分
小菜鸡
06-23 159
完全平方数给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。示例 1:输入:n = 12 输出:3 解释:12 = 4 + 4 + 4 示例 2:输入:n = 13 输出:2 解释:13 = 4 + 9提示:1 ...
LeetCode 139. 单词拆分动态规划,DFS和BFS解决)
数据结构和算法
09-06 1753
截止到目前我已经写了 600多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载 下载链接:https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ 提取码:6666 public boolean wordBreak(String s, List<String> dict) { boolean[] dp = new boolean[s.length() + 1]; for (i.
leetcode139. 单词拆分python
ganggang的博客
12-10 298
题目描述: 题解:动态规划 参考:https://segmentfault.com/a/1190000023020706 1.dp[i]表示s中前i个字符构成的字符串可否拆分为wordDict中的单词。dp初始化为全部False,dp[0]=True(dp长度为len(s)+1) 2.i从0开始到len(s),将s[0:i]分为两部分:s[0:j] s[j:i],dp[i]为True还是False由这两部分共同决定,如果dp[j]=True,则说明s[0:j]部分可以拆分为wordDict中内容
LeetCode-139. 单词拆分-Java-medium
qq_41829337的博客
09-07 283
LeetCode-139. 单词拆分-Java-medium
【Leetcode】139. 单词拆分
锥栗的博客
04-21 313
题目描述 // 139. 单词拆分 // 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可 // 以被空格拆分为一个或多个在字典中出现的单词。 // 说明: // 拆分时可以重复使用字典中的单词。 // 你可以假设字典中没有重复的单词。 题解 // 动态规划 // 如果希望"leetcode"可以拆分,那么一定存在子字符串可以匹配, // 这个子字符串可能是"l",可能是"le",可能是"lee",也可能是"leet", // 我们构造boolean dp
leetcode 139. 单词拆分
Genius_J的博客
01-15 212
一、题意 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s。(不需要所有单词都能用上) 二、解法 解法: 动态规划 dp[i]表示前i个字符是否能拆分成若干个出现在字典中的单词。 对于dp[i]由其子字符串dp[j](j<i)和到i-1的字符串是否能组成一个单词决定。 用map存储wordDict单词 dp[i]=dp[j]&&map.count(s.substr(j,i-j)) i-j超过wordDict中单词的最大长度
力扣 139. 单词拆分 python AC
qq_63443032的博客
05-07 342
-如果元素长度不大于当前字符串位置,且 字符串位置减元素长度 状态为真(到这步之前的字符串能够被列表中元素表示),且这段字符串和元素相等。定义dp[i]的状态为:s字符串到第i位为止可以被列表中元素代表。--设为真,并跳出循环,到字符串下一个位置。--返回dp最后一位的状态。--遍历列表每个元素。--遍历字符串每一位。
139. 单词拆分(JavaScript)
csD_Dscnnnnnnn的博客
03-01 309
139. 单词拆分(JavaScript)
leetcode 139. 单词拆分 python思路详解
daniel_hh的博客
04-26 1404
leetcode 139. 单词拆分 首先先阅读一下题干: 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 说明: • 拆分时可以重复使用字典中的单词。 • 你可以假设字典中没有重复的单词。 示例 1: 输入: s = “leetcode”,wordDict = [“leet”, “code”] 输出: tru...
【LeetCode】139. 单词拆分——dp
wudi_X的博客
08-17 463
题目 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 说明: 拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。 示例 1: 输入: s = &quot;leetcode&quot;, wordDict = [&quot;leet&quot;, &quot;code&quot;] 输出: true 解释: 返回 true 因为 &quo
leetcode 139.单词拆分(python)
pureszgd的博客
10-17 671
leetcode 139.单词拆分(python) 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 说明: 拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。 示例 1: 输入: s = "leetcode", wordDict = ["leet", "code"] 输出: true 解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。 示例 2: 输入: s = "
139. 单词拆分动态规划
z-k的博客
01-27 1171
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 说明: 拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。 示例 1: 输入: s = "leetcode", wordDict = ["leet", "code"] 输出: true 解释: 返回 true 因为 "leetcode" 可以...
atcoder abc372 启发式合并, dp
2201_75845839的博客
09-22 179
现在考虑如何存数据。可以用并查集合并两个集合,并且在合并的时候一定要将小的集合合并到大的集合中去,因为小集合合并到大集合中,最后的集合一定大于小集合元素数量的两倍,因此合并的时间复杂度不会超过logn。思路:判断当前变化的位置对结果是否会产生影响,在询问前先计算有多少ABC, 每次变换位置x前后扫描一下[x - 2, x + 2]范围内是否有ABC,变换前有让cnt --, 变换后有让cnt ++思路:三进制转换,可以参考二进制,先把当前可以加入的最大的3的幂次加入,这样一定可以凑出答案。
力扣 16.最接近的三数之和
qq_51352130的博客
09-16 412
设 s=nums[i]+nums[j]+nums[k],为了判断 s 是不是与 target 最近的数,我们还需要用一个变量 minDiff 维护 ∣s−target∣ 的最小值。分类讨论:如果 s=target,那么答案就是 s,直接返回 s。如果 s>target,那么如果 s−target<minDiff,说明找到了一个与 target 更近的数,更新 minDiff 为 s−target,更新答案为 s。然后和三数之和一样,把 k 减一。
C语言题目之单身狗2
something for nothing的博客
09-22 288
c语言题目之找单身狗2:在一堆数中找到两个只出现过一次数的数
全栈项目小组【算法赛】题目及解题
最新发布
2201_75648436的博客
09-22 165
全栈项目小组【算法赛】
尊享面试100题
qq_71286244的博客
09-21 310
尊享面试100题
使用kotlin解决这个问题:139. 单词拆分 中等 2.1K 相关企业 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 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 中的所有字符串 互不相同
05-26
对于每个 i,我们需要枚举 s 的前 j (j ) 个字符是否可以拆分单词,如果可以拆分,那么我们就需要判断 s[j+1,i] 是否出现在字典中,如果出现,则 dp[i] 可以从 dp[j] 转移而来,即 dp[i] = dp[j] && check(s[j+1,i...
写文章

热门文章

  • Linux命令·scp 19448
  • 小知识·adb安装和使用方法 15717
  • Linux命令·pwd 14112
  • Linux命令·ping 12329
  • QT·移植Qt到ARM平台及搭建Qt交叉编译环境 10920

分类专栏

  • 数据结构与算法学习 14篇
  • 工作日常坑~~~ 5篇
  • LeetCode刷题笔记 440篇
  • Linux系统编程 59篇
  • QT学习 14篇
  • Linux命令 43篇
  • 杂项小知识 13篇
  • Linux嵌入式 57篇
  • 面经 1篇
  • ARM学习 1篇

最新评论

  • 小问题·Ubuntu插入U盘不识别

    m0_67396777: 这个才是解决U盘插入但没有显示任何内容的方法

  • 小问题·Ubuntu插入U盘不识别

    hanhanhan233: 有用!!看了堆文章没一个有用的,原来这么简单表情包

  • 【C语言】十大经典排序算法-动图演示

    averyee: 就是代码实现的函数名怎么都是bubbleSort是不是写错了

  • 【C语言】十大经典排序算法-动图演示

    averyee: 膜拜大佬,讲解的真的很细节,而且还有动态图,看着很舒服,很容易理解

  • Linux·图解网络包发送过程

    龙的传人科龙: 牛的,飞哥徒弟?

大家在看

  • 基于黑猩猩算法优化的最小交叉熵图像多阈值分割
  • 静态绑定和动态绑定 555
  • 身份安全风险不断上升:企业为何必须立即采取行动 245
  • mysql如何变更自增主键id起始值例子解析
  • 致敬编程巨匠:Anders Hejlsberg 安德斯·海尔斯贝格

最新文章

  • 小问题·统计含中文字符串的有效字符个数
  • LeetCode·每日一题·722. 删除注释·模拟
  • LeetCode·每日一题·822. 翻转卡片游戏·哈希
2023年168篇
2022年470篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家临江玻璃钢动物雕塑优质户外玻璃钢雕塑保山市玻璃钢雕塑批发专业供应的玻璃钢花盆铜玻璃钢雕塑定做价格西湖区玻璃钢金属雕塑哪家好镂空玻璃钢卡通雕塑报价太原玻璃钢学校雕塑韶关欧式玻璃钢人物雕塑质量好的玻璃钢鹿雕塑玻璃钢雕塑易碎吗江苏蓝色玻璃钢花盆河南郑州玻璃钢雕塑淮北定做玻璃钢雕塑厂选哪家玻璃钢礼物盒雕塑淮南玻璃钢雕塑工厂长宁区进口玻璃钢雕塑哪家好沈阳玻璃钢雕塑批发江门市玻璃钢雕塑价格金山玻璃钢花盆玻璃钢浮雕雕塑供应肇庆欧式玻璃钢人物雕塑济源玻璃钢花盆花器四会玻璃钢雕塑厂嘉峪关公园玻璃钢雕塑厂家濮阳玻璃钢艺术雕塑价格价钱景德镇玻璃钢雕塑制作厂家玻璃钢雕塑喷漆哪家好四川商场美陈市场报价沈阳定制玻璃钢雕塑多少钱香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化