LeetCode 139. 单词拆分
139. 单词拆分
解题思路
- BFS
- 递归搜索 + 保存递归返回值 = 记忆化搜索
- 去掉递归中的「递」,只保留「归」的部分,即自底向上计算
状态定义
- 用一个布尔数组 $f[i]$ 来表示字符串 $s$ 的前 $i$ 个字符是否可以被拆分为字典中的单词。
初始化 - $f[0] = true$,表示空字符串是可以拆分的。
状态转移 - 对于每个 $i$,从 $j = i - 1$ 遍历到 $i - maxLen$(这里 $maxLen$ 是字典中单词的最大长度)。如果 $s[j, i)$ 在字典中,并且 $f[j]$ 为 $true$,说明从 $0$ 到 $j$ 的部分可以拆分,而 $s[j, i)$ 是一个合法的单词,因此 $f[i]$ 也应该为 $true$。
优化 - 从字典中找出单词的最大长度 $maxLen$,剪枝
参考代码
BFS
1 | |
记忆化搜索
1 | |
转换为递推
1 | |
LeetCode 139. 单词拆分
https://sowink.cn/2026/02/08/LeetCode-139-单词拆分/