力扣热门100题之单词拆分

核心思路

  • dp[i] 表示:字符串前 i 个字符能不能被字典里的单词拼出来
  • 我们要算的就是 dp[s.length()]

转移方程

如果存在一个位置 j,满足:

  1. dp[j] = true(前 j 个字符能拼出来)
  2. s[j ... i-1] 这个子串在字典里那么:dpi = true

通俗解释

  1. 把字典放进 Set 方便快速查找
  2. dp[0] = true:空字符串默认是合法的
  3. 对每个位置 i,往前看所有 j
    • 如果前面 j 是通的
    • 并且 j 到 i 这一段正好是一个单词
    • i 也是通的
  4. 最后看整个字符串 dp[n] 是不是通的

完整代码实现:

java 复制代码
class Solution {
    public boolean wordBreak(String s, List<String> wordDict) {
        Set<String> set = new HashSet<>(wordDict);

        int n = s.length();

        boolean[] dp = new boolean[n + 1];
        dp[0] = true;// 前0个字符 空串 是可以拼出来的

        for(int i = 1;i<=n;i++){
            for(int j = 0;j<i;j++){
                // 前j个可以拼 并且j~i这段是单词
                if(dp[j] && set.contains(s.substring(j,i))){
                    dp[i] = true;
                    break;
                }
            }
        }
        return dp[n];
    }
}
相关推荐
:-)3 小时前
算法-归并排序
java·开发语言·数据结构·算法·排序算法
Jerry7 小时前
LeetCode 101. 对称二叉树
算法
可编程芯片开发8 小时前
基于MPPT最大功率跟踪的离网光伏发电系统Simulink建模与仿真
算法
AI科技星8 小时前
线性算子不是空间映射函数,是全域双螺旋场之间拉伸、旋转、耦合、坍缩的跨空间标准化变换载体《全域数学vs传统数学:人类文明进阶200讲》第80讲
线性代数·算法·矩阵·数据挖掘·回归·乖乖数学·全域数学
米罗篮8 小时前
矩阵快速幂 (Exponentiation By Squaring Applied To Matrices)
c++·线性代数·算法·矩阵
dream_home84078 小时前
图像算法模型NPU适配与算法服务实战指南
人工智能·python·算法·npu 图像服务
大鱼>9 小时前
多宠物家庭智能管理平台:云端架构与多设备协同实战
python·算法·iot·宠物
To_OC10 小时前
LC 22 括号生成:刷完这道题,我终于搞懂回溯剪枝了
javascript·算法·leetcode
To_OC10 小时前
LC 39 组合总和:回溯入门必刷题,我踩过的两个坑都在这了
javascript·算法·leetcode
数字杂技师10 小时前
每条推荐都很准,为什么我还是越刷越无聊?
算法