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

leetcode hot100单词拆分

在这里插入图片描述
在本题中,我们是要把一个字符串,判断是否能用给的字符串数组中的单词进行拆分,如果可以则返回true,不能的话则返回false。这个题一开始看无法与背包问题联系在一起。但仔细考虑,就是用物品(给的字符串数组中的单词)去装背包(给定的字符串)。如果可以凑成,那么就返回true。

并且题目中所说的单词可以重复使用,也就是完全背包问题。并且我们要考虑,这个题是否需要考虑遍历顺序拿 s = “applepenapple”, wordDict = [“apple”, “pen”] 举例。

“apple”, “pen” 是物品,那么我们要求 物品的组合一定是 “apple” + “pen” + “apple” 才能组成 “applepenapple”。

“apple” + “apple” + “pen” 或者 “pen” + “apple” + “apple” 是不可以的,那么我们就是强调物品之间顺序。
所以我们要先遍历背包再遍历物品。并且可以重复使用,

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

如果确定dp[j] 是true,且 [j, i] 这个区间的子串出现在字典里,那么dp[i]一定是true。(j < i )。

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

从递推公式中可以看出,dp[i] 的状态依靠 dp[j]是否为true,那么dp[0]就是递推的根基,dp[0]一定要为true,否则递推下去后面都都是false了。

那么dp[0]有没有意义呢?

dp[0]表示如果字符串为空的话,说明出现在字典里。

但题目中说了“给定一个非空字符串 s” 所以测试数据中不会出现i为0的情况,那么dp[0]初始为true完全就是为了推导公式。

下标非0的dp[i]初始化为false,只要没有被覆盖说明都是不可拆分为一个或多个在字典中出现的单词

class Solution {public boolean wordBreak(String s, List<String> wordDict) {HashSet<String> set = new HashSet<>(wordDict);boolean[] valid = new boolean[s.length() + 1];valid[0] = true;for (int i = 1; i <= s.length(); i++) {for (int j = 0; j < i;  j++) {if (set.contains(s.substring(j, i)) && valid[j]) {valid[i] = true;}}}return valid[s.length()];}
}

注意,本题中创建了一个新的 HashSet 实例,并使用 wordDict 集合的元素进行初始化。这意味着 set 中的所有元素都将是 wordDict 中的元素,但不包含任何重复项,因为 HashSet 是一个不允许重复元素的集合。
s.substring(j,i)表示截取字符串s下标从j到i的字串,这里是左闭右开的区间。所以j只能小于i,如果等于i的话,下面截取的时候就会出错。

http://www.lryc.cn/news/304164.html

相关文章:

  • 大数据构建知识图谱:从技术到实战的完整指南
  • WebServer -- 定时器处理非活动连接(上)
  • 微服务部署:金丝雀发布、蓝绿发布和滚动发布的对比
  • 轻松入门MySQL:优化复杂查询,使用临时表简化数据库查询流程(13)
  • vmware的ubuntu虚拟机因空间满无法启动
  • Unity数据持久化之PlayerPrefs
  • uniapp微信公众号H5分享
  • 深入理解指针(c语言)
  • 高级语言期末2015级唐班B卷
  • 开发一款招聘小程序需要具备哪些功能?
  • 嵌入式学习-qt-Day3
  • 零基础到高级:Android音视频开发技能路径规划
  • 阿里云香港轻量应用服务器网络线路cn2?
  • python中websockets与主线程传递参数
  • js谐音梗创意小游戏《望子成龙》
  • 第十篇:node处理404和服务器错误
  • 左右互博。
  • android通过广播打印ram使用信息
  • 内存管理——线性内存,进程空间
  • 入门Python必读的流程控制语句
  • day05-进程通信
  • 如何将OpenAI Sora生成的普通AI视频转化为Vision Pro的空间视频,沉浸式体验
  • 爬虫基础(下)
  • 【八股文面试】Java基础常见面试题总结(上)
  • c++:蓝桥杯的基础算法2(构造,模拟)+练习巩固
  • C++ 和 C#的区别
  • 2.14日学习打卡----初学Zookeeper(一)
  • SkyWalking之APM无侵入可观测原理分析
  • Missing artifact org.yaml:snakeyaml:jar:1.29
  • 三opencv源码解压及环境变量配置