力扣热门100题之单词拆分

核心思路

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

转移方程

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

  1. dp[j] = true(前 j 个字符能拼出来)
  2. s[j ... i-1] 这个子串在字典里那么:dp[i] = 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];
    }
}
相关推荐
05候补工程师23 分钟前
【ROS 2 避坑指南】从 SLAM 实时建图到 Nav2 导航算法深度调优全过程
算法·ubuntu·机器人
Dlrb121126 分钟前
C语言-函数传参
c语言·数据结构·算法
洛水水8 小时前
【力扣100题】18.随机链表的复制
算法·leetcode·链表
南宫萧幕8 小时前
规则基 EMS 仿真实战:SOC 区间划分与 Simulink 闭环建模全解
算法·matlab·控制
多加点辣也没关系8 小时前
数据结构与算法|第二十三章:高级数据结构
数据结构·算法
hoiii18710 小时前
孤立森林 (Isolation Forest) 快速异常检测系统
算法
c++之路12 小时前
适配器模式(Adapter Pattern)
java·算法·适配器模式
吴声子夜歌12 小时前
Java——接口的细节
java·开发语言·算法
myheartgo-on12 小时前
Java—方 法
java·开发语言·算法·青少年编程
宝贝儿好13 小时前
【LLM】第三章:项目实操案例:智能输入法项目
人工智能·python·深度学习·算法·机器人