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]
        
相关推荐
2501_946736162 分钟前
在线考试平台如何选型?从功能、优势与应用场景角度详解
大数据·人工智能·算法
天辛大师18 分钟前
天心大师:不确定中锚定自我,AI生活的哲学命题
人工智能·算法·决策树·机器学习·生活·启发式算法
皓月斯语1 小时前
B2132 素数对
c++·算法·题解
星轨初途1 小时前
LeetCode 热题 100——day2 字母异位词分组
c++·算法·leetcode
happyprince2 小时前
篇1:整体观 · bitsandbytes项目全貌解读
人工智能·算法
青梅橘子皮2 小时前
STL---map/set... “家族“详解(从使用到底层)(1)
数据结构·算法
让学习成为一种生活方式2 小时前
DNA 甲基化综述(模式、调控与功能)--Current Opinion in Plant Biology
算法
Adios7942 小时前
搜索二维矩阵 II
java·数据结构·算法
-森屿安年-3 小时前
647. 回文子串
c++·算法·动态规划
皓月斯语3 小时前
P5736 【深基7.例2】质数筛
c++·算法·题解