力扣热门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];
    }
}
相关推荐
fanged5 分钟前
简单看看3A算法2(TODO)
算法
智者知已应修善业10 分钟前
【51单片机4位静态数码管显示1234】2023-11-14
c++·经验分享·笔记·算法·51单片机
♡すぎ♡19 分钟前
镜面 IBL 预过滤贴图的计算
算法·计算机图形学·贴图·pbr
Lsk_Smion38 分钟前
力扣实训 _ [200].岛屿数量
算法·leetcode·深度优先
Boom_Shu1 小时前
长方形的关系
数据结构·c++·算法
ZhengEnCi1 小时前
O07-银行家算法
算法
装不满的克莱因瓶1 小时前
图像尺寸调整:缩放矩阵如何改变像素坐标?
人工智能·线性代数·数学·算法·机器学习·矩阵
Lumbrologist2 小时前
【C++】零基础入门 · 第 13 节:类与对象基础
java·c++·算法
LONGZETECH2 小时前
软硬协同+故障注入:无人机仿真维修与操控仿真底层算法逻辑拆解
大数据·c语言·算法·3d·unity·无人机
Lsk_Smion2 小时前
力扣实训 _ [543].二叉树的直径 _ [23].合并K个升序列表
数据结构·算法·leetcode