LeetCode热题100-单词拆分

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true

**注意:**不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。

核心思路(动态规划)

  • 定义 dp[i]前 i 个字符能否被拆分
  • 初始化:dp[0] = True(空串合法)
  • 转移:对每个位置 i,往前找一个 j,如果 dp[j] 合法,并且 s[j:i] 在字典里→ dp[i] = True

至于为什么长度是n + 1而不是n,原因:

dp [i] 表示:字符串前 i 个字符能否拆分

  • 字符串下标是 0 ~ n-1
  • 前 0 个字符:空串
  • 前 1 个字符:s [0]
  • 前 2 个字符:s [0] s [1]
  • ...
  • n 个字符:整个字符串 s [0..n-1]

所以要想表示整个字符串 ,dp 必须开到 dp[n]

python 复制代码
class Solution:
    def wordBreak(self, s: str, wordDict: List[str]) -> bool:

        word_set = set(wordDict)
        n = len(s)
        dp = [False] * (n + 1)
        dp[0] = True

        for i in range(1, n + 1):
            for j in range(i):
                if dp[j] and s[j:i] in word_set:
                    dp[i] = True

        return dp[n]
        
相关推荐
逻辑驱动的ken11 小时前
Java高频考点场景题24
java·开发语言·面试·职场和发展·求职招聘
绛橘色的日落(。・∀・)ノ11 小时前
机器学习之评估与偏差方差分析
算法
消失的旧时光-194311 小时前
C语言对象模型系列(四)《Linux 内核里的 container_of 到底是什么黑魔法?》—— 一篇讲透 Linux 内核的“对象模型”核心技巧
linux·c语言·算法
AI_Ming12 小时前
从0开始学AI:层归一化,原来是这回事!
算法·ai编程
WL_Aurora12 小时前
备战蓝桥杯国赛【Day 8】
算法·蓝桥杯
智者知已应修善业12 小时前
【51单片机模拟生日蜡烛】2023-10-10
c++·经验分享·笔记·算法·51单片机
MediaTea13 小时前
Scikit-learn:从数据到结构——无监督学习的最小闭环
人工智能·学习·算法·机器学习·scikit-learn
智者知已应修善业13 小时前
【51单片机如何让LED灯从一亮到八,再从八亮到一】2023-10-13
c++·经验分享·笔记·算法·51单片机
qeen8713 小时前
【数据结构】二叉树相关经典函数C语言实现
c语言·数据结构·c++·笔记·学习·算法·二叉树
良木生香13 小时前
【C++初阶】STL——List从入门到应用完全指南(1)
开发语言·数据结构·c++·程序人生·算法·蓝桥杯·学习方法