当前位置: 首页 > 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的话,下面截取的时候就会出错。

相关文章:

  • 物联网和人工智能的融合
  • MFC中对编码文件的操作01
  • 图片搜索接口的应用展示说明
  • 阿里云ECS香港服务器性能强大、cn2高速网络租用价格表
  • Python学习笔记——自定义函数(基础知识)
  • qt-交通路口仿真
  • 数学的雨伞下:理解世界的乐趣
  • openEuler2203 LTS安装并远程桌面接VMware WorkStation Pro 17
  • 找座位 - 华为OD统一考试(C卷)
  • 虽迟但到,Postman终于支持Websocket接口了
  • 备战蓝桥杯 Day8(最长上升子序列LIS模型)
  • 第六章:纹理贴图
  • 认识K8S
  • Job 和 DaemonSet
  • Promise
  • SpringBoot+WebSocket实现即时通讯(四)
  • 二.自定义头文件
  • HTTP的详细介绍
  • 3、windows环境下vscode开发c/c++环境配置(二)
  • 通过Docker Compose的方式在Docker中安装Maven环境
  • 华夏幸福:去年营业收入237.65亿元,同比减亏12亿元
  • 深入贯彻中央八项规定精神学习教育中央指导组培训会议召开
  • 浙江官宣:五一假期,没电、没气、没油车辆全部免费拖离高速
  • 上海开花区域结果,这项田径大赛为文旅商体展联动提供新样本
  • 澎湃回声|山东莱州、潍坊对“三无”拖拉机产销市场展开调查排查
  • 杭州6宗涉宅用地收金125.76亿元,萧山区地块楼面价冲破5万元/平米