发布于: 2022-7-26最后更新: 2022-8-26字数 504阅读时长 2 分钟

type
Post
status
Published
date
Jul 26, 2022
slug
leetcode-139-word-break
summary
tags
动态规划
字符串哈希
category
LeetCode热题HOT100
icon
password

一、题目链接

 
 

二、题解

 

反向思维?

问题是问能够用 wordDict 中的单词拼接成 s 字符串,但是我们应该反着想,是否可以将 s 字符串拆分成若干个字符串,使得拆分出来的字符串都在 wordDict 中即可!

字符串哈希

由于使用自带的哈希表,哈希查询字符串时的复杂度最坏是和字符串长度成正比的,即 ,因此整个算法复杂度最坏会升级到 ,因此可以使用字符串哈希将其降到

动态规划

 
  • 状态表示:f[i] 表示 s 串的 [1, i] 是否可以拆分为 wordDict 中的字符串
  • 状态计算:考虑拆分的最后一步,最后一步可以拆分到 j 的位置, 使得区间变为 [1, j] [j + 1, i]
    • 所以f[i] = f[j] & s[j + 1, i] 在wordDict中
  • 初始状态:保证代码正确性,f[0] = true,无特别意义或者可以理解为 s 串的 [0, 0] 可以拆分为 wordDict 中的字符串(即都为空串)
  • 最终答案f[n] 表示 s[1, n] 是否可以拆分为 wordDict 中的字符串
 
 
 

复杂度分析

 
  • 时间复杂度:
  • 空间复杂度:

三、代码实现

 

Loading...