力扣热门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];
    }
}
相关推荐
小月土星19 分钟前
JavaScript 快速排序:从 pivot、双指针到分治思想
javascript·算法·面试
小月土星26 分钟前
JavaScript 递归入门:从 1 到 n 求和,再到数组扁平化
javascript·算法·面试
To_OC16 小时前
LC 1 两数之和:面试第一道必考题,暴力解法直接被面试官 pass
javascript·算法·leetcode
鱼鱼不愚与20 小时前
《原来如此 | 第01期:为什么导航软件能预测红绿灯倒计时?》
算法
复杂网络1 天前
论最小 Agent 计算机的形态
算法
kisshyshy2 天前
🍦 雪糕、食堂、火车厢:三幅漫画吃透栈、队列与链表
javascript·算法
猿人谷2 天前
不只是 CPU 阈值:STAR 如何用 GAT + Transformer 做容器级自动扩缩容?
人工智能·算法
复杂网络2 天前
Stable Diffusion 视觉大模型微调技术深度调研
算法
复杂网络2 天前
基于 Stable Diffusion 架构的视觉大模型代表性工作与原理深度解析
算法