力扣热门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];
    }
}
相关推荐
垆边人似月.2 分钟前
华为题:无重复字符的最长子串变种
算法
糖果豆豆8 分钟前
灾难性遗忘不是"新旧打架"——旧知识记不住,是因为它没长成"环"
算法
垆边人似月.9 分钟前
华为题:任务调度
数据结构·c++·算法
垆边人似月.11 分钟前
华为题:编辑距离
算法·华为
会灭火的程序员11 分钟前
大模型部署硬件资源计算指南:从显存估算到显卡选型
人工智能·算法
信奥卷王19 分钟前
[GESP202506 六级] 最大因数(含视频)
数据结构·算法
局部有解25 分钟前
Leetcode - 42 接雨水(一维)
数据结构·c++·算法·leetcode
垆边人似月.31 分钟前
华为题:矩阵中的最长递增路径
算法·深度优先
小诗懂技术34 分钟前
linux驱动中断,相关中断的方式与适用场景
linux·arm开发·驱动开发·算法
不会就选b37 分钟前
算法日常・每日刷题--<动态规划>25
算法