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++代码
|
|