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 必须开到 dpn

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]
        
相关推荐
文丑颜不良啊13 分钟前
LeetCode2841~2860题目解析
java·leetcode
【心态好不摆烂】32 分钟前
数据结构基础精讲3
数据结构·算法
漂流瓶jz2 小时前
UVA-1613 K度图的着色 题解答案代码 算法竞赛入门经典第二版
算法·深度优先·图论·贪心·aoapc·算法竞赛入门经典·uva
文丑颜不良啊2 小时前
LeetCode2921~2940题目解析
java·leetcode
Pniubi2 小时前
动态规划入门 ( - 力扣509斐波那契数)
算法·动态规划
吴长建先生重名了3 小时前
GitHub Actions部署报表系统踩坑记:幂等性与限
算法
贝壳6904 小时前
一个2026年2月才上传的库,凭什么敢碰2009年就有人写烂的题目
算法
文丑颜不良啊4 小时前
LeetCode2901~2920题目解析
java·leetcode
贝壳6904 小时前
同一道三亿位选型题,三个AI给了我三个答案,我把它们拉进同一台机器复跑
算法
Yuzhiyuxia5 小时前
【AI Agent面试系列】AI Agent实战设计
人工智能·面试·职场和发展