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]
        
相关推荐
wearegogog1232 小时前
基于蚁群算法的无人机三维航路规划(MATLAB实现)
算法·matlab·无人机
旖-旎2 小时前
递归(快速幂)(5)
c++·算法·力扣·递归
小江的记录本4 小时前
【分布式】分布式核心组件——分布式ID生成:雪花算法、号段模式、美团Leaf、百度UidGenerator、时钟回拨解决方案
分布式·后端·算法·缓存·性能优化·架构·系统架构
leobertlan11 小时前
好玩系列:用20元实现快乐保存器
android·人工智能·算法
青梅橘子皮11 小时前
C语言---指针的应用以及一些面试题
c语言·开发语言·算法
_Evan_Yao11 小时前
技术成长周记06|面试中看清差距,新项目点燃热情
面试·职场和发展
_深海凉_12 小时前
LeetCode热题100-有效的括号
linux·算法·leetcode
被开发耽误的大厨15 小时前
1、==、equals、hashCode底层原理?重写场景?
算法·哈希算法
haina201915 小时前
《品牌观察》专访海纳AI:引领AI面试测评新时代
人工智能·面试·职场和发展