文章目录
-
- 问题描述
- 动态规划解法
-
- 解法核心思路
- 完整代码实现
- 关键代码解析
-
- 1. 数据结构初始化
- 2. 动态规划数组
- 3. 核心循环逻辑
- 4. 子串区间理解(关键)
- 示例演算
- 复杂度分析
- 算法优化点
- 总结
本文详细解析LeetCode 139题"单词拆分"的动态规划解法,涵盖核心思路、代码实现、区间理解和性能优化
问题描述
给定一个字符串 s
和一个字符串字典 wordDict
,判断 s
是否能被拆分为一个或多个字典中单词的空格分隔序列。注意:字典中的单词可以重复使用。
示例:
输入: s = "leetcode", wordDict = ["leet", "code"]
输出: true
解释: "leetcode" 可拆分为 "leet code"
动态规划解法
解法核心思路
使用动态规划数组 valid
,其中:
valid[i]
表示字符串s
的前i
个字符(s.substring(0, i)
)能否被拆分为字典中的单词- 目标是计算
valid[s.length()]
(整个字符串是否可拆分)
完整代码实现
class Solution {
public boolean wordBreak(String s, List<String> wordDict) {
// 将字典转换为HashSet以提高查找效率
HashSet<String> set = new HashSet<>(wordDict);
// 创建动态规划数组,长度+1(包含空字符串情况)
boolean[] valid = new boolean[s.length