139. 单词拆分
分析
- 状态定义:
- 定义
f[i]
:表示从第i
个字符到字符串结尾的子串能否被字典中的单词拼接而成
- 定义
- 状态转移:
- 对于子串
s[i:j]
,若s[i:j]
出现在字典中,且f[j] = true
,则可以拼接出s[i:n]
,即f[i] = true
- 对于子串
- 初始化:
f[n] = true
:空字符串可以被成功拼接
- 结果:
- 返回
f[0]
,即判断整个字符串是否可以被拼接
- 返回
时间复杂度
- 外层循环遍历字符串
O(n)
,内层循环遍历每个子串的结尾O(n)
,检查子串是否在字典中平均耗时O(k)
,其中k
是子串的平均长度
总时间复杂度为 O(n^2 * k)
空间复杂度
- 动态规划数组
f
占用O(n)
- 哈希表占用
O(l)
,其中l
是字典中单词的总长度
总空间复杂度为 O(n + l)
C++代码
|
|