当前位置: 首页 > news >正文

上海域名icp海网站建设如何做网页快捷方式

上海域名icp海网站建设,如何做网页快捷方式,铜陵港航投资建设集团网站,wordpress怎么改后台题目链接:139. 单词拆分 - 力扣(LeetCode) 前情提要: 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 最近刚学完背包,所以现在的题解都是以背包问题为基础再来写的。 如果大家不懂背包问题的话&#…

题目链接:139. 单词拆分 - 力扣(LeetCode)

前情提要:

因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。

最近刚学完背包,所以现在的题解都是以背包问题为基础再来写的。

如果大家不懂背包问题的话,建议可以去学一学01背包和完全背包。

如果大家感兴趣,我后期可以出一篇专门讲解背包问题。

dp五部曲。

1.确定dp数组和i下标的含义。

2.确定递推公式。

3.dp初始化。

4.确定dp的遍历顺序。

5.如果没有ac打印dp数组 利于debug。

每一个dp题目如果都用这五步分析清楚,那么这道题就能解出来了。

这里下文统一使用一维dp数组。

题目思路:

本题题目描述比较清晰,给了我们一个非空字符串s和一个字符串列表wordDict作为字典,要求我们利用wordDict里的字符串来拼接出s,能拼接返回true,不能拼接返回false。wordDict中的字符串可以使用多次。

看完这个题目描述,是不是能够联想到完全背包。

其实wordDict的字符串就可以抽象为完全背包问题中的物品,s就是背包。

那么该题就可以转化为能不能将背包中的容量拆分,拆分分配到各个物品上,如果刚好能拆分完(也就是看能不能将背包装满)

但这里因为s是一个字符串,所以我们用字符串的长度作为背包容量。

话不多说,我们直接开始动规五部曲。

1.确定dp数组和i下标的含义。

我们最后结果要输出什么,就怎么定义dp数组。

字符串长度为i的话,dp[i]为true,表示可以拆分为一个或多个在字典中出现的单词。

2.确定递推公式。

该题的递推公式与之前的有些不同,之前的是把每一个物品装入到我们的背包中。

但该题因为是字符串,装入有点难,所以换一种思路,我们将背包进行拆分,将背包容量(字符串s)拆分为一个个物品(wordDict字典里的字符串),如果能拆分成功就return true,如果不能就return false。

如果此时我们的dp[j] 为 true的话,那说明字符串长度为j的s是可以拆分为一个或者多个字典中出现的单词,那么我们就只用再判断[j,i]这段区域是否也能拆分为字典中出现的单词,如果能拆分那么dp[i]就为true。

所以递推公式是 if([j, i] 这个区间的子串出现在字典里 && dp[j]是true) 那么 dp[i] = true。

3.dp初始化。

本题的初始化不能从题目描述中得出。得从递推公式中推出。

有递推公式可以看出,dp[i] 都是由 dp[j - i]推出,所以我们当前的状态是由前面的状态推出。

那我们的dp[0]就必须初始化为true,如果初始化为false的话后面推出来的都是false。

4.确定dp的遍历顺序。

该题的遍历顺序也有一定讲究,举个例子。

s = "leetcode", wordDict = ["leet", "code"]

这个s只能先拆分为leet 再拆分为 code。换句话说s只能先由leet组成再加上code。所以该物品是有顺序的。

如果没有顺序那可能会组成codeleet,这并不是我们要的结果。

在完全背包问题中,先遍历物品后遍历背包求的是物品的组合。

先遍历背包后遍历物品求的是物品的排列。

组合是无顺序的,排列是有顺序的,所以本题要先先遍历背包后遍历物品。

5.如果没有ac打印dp数组 利于debug。

在这里插入图片描述

最终代码:

class Solution {public boolean wordBreak(String s, List<String> wordDict) {//本题要求将背包装满,如果能装满返回true 不能装满返回false//利用一个hash结构来快速查找[j,i]只否能在wordDict中查到HashSet<String> set = new HashSet<>(wordDict);//定义dp数组boolean [] dp = new boolean [s.length() + 1];//dp初始化dp[0] = true;//该题其实是求一个排列 所以需要先遍历背包 后遍历物品for(int i = 1;i <= s.length();i ++){for(int j = 0;j < i;j ++){//我们要判断[j i]就是物品,我们要判断该物品是否出现在我们的字典里if(set.contains(s.substring(j,i)) && dp[j]){dp[i] = true;}}}return dp[s.length()];}
}

dp类的题目如果想加深理解,我建议大家手动模拟一下dp数组推导的过程。

这一篇博客就到这了,如果你有什么疑问和想法可以打在评论区,或者私信我。

我很乐意为你解答。那么我们下篇再见!

http://www.yayakq.cn/news/406798/

相关文章:

  • 工信部网站备案信息怎么查询网赢天下深圳网站建设
  • 旅游网站建设流程是什么意思微信php网站开发流程
  • 宛城区网站推广网站跳出率怎么计算
  • 给个网站你们知道的wordpress首页分页函数
  • 马鞍山网站建设开发今天的新闻直播
  • 新手如何优化网站排名电脑网站建设服务器
  • 兴仁企业建站公司seo工作流程图
  • 做基因互作的网站dw软件官网
  • 金融视频直播网站开发wordpress你没有权限设置
  • 网站开发公司怎么做账四川城乡建设厅建筑特种作业证书
  • 中山免备案网站建设浙江省湖州艺术与设计学校官网
  • 网站建设怎么设置网址wordpress主题使用教程
  • 专业做网站服务商微信公众号开发平台登录
  • 公司注册流程步骤seo优化按天扣费
  • 广西建设网桂建云网站手机网站怎么制作软件
  • dedecms建设慕课网站一个网站做多有几种颜色
  • ui是做什么的百度关键字优化价格
  • 网站开发课程改革广东企业网站建设公司价格
  • 正规的外包加工订单网有哪些网站seo关键词排名查询
  • seo网站优化服务合同wordpress google字体 插件
  • 美术馆网站建设总体要求网站配色案例分析
  • 网站如何做担保交易交易平台app下载
  • 阿里云做网站用哪个镜像wordpress首页翻页
  • 东莞ppt免费模板下载网站网站的具体内容
  • 购物网站开发实例网上注册公司流程视频
  • 如何在别人网站挂黑链wordpress h1 h2
  • 团购网站建设报价网站建设软文推广
  • 学校资源网站建设方案蓝色网站素材
  • 珠海移动网站建设公司排名网站服务器网络
  • 网站数据怎么会丢失展开网站建设