力扣题目:#139.单词拆分
刷题时长:参考题解后5min
解题方法:动态规划
复杂度分析
- 时间复杂度:O(n^3),因为substr返回子串的副本是O(n)的复杂度(这里的n是substring的长度)
- 空间复杂度:O(n)
问题总结
- 没想清楚dp数组下标所代表的含义
- 理解此题求排列
本题收获
- 题意转换:单词就是物品,字符串s就是背包,单词能否组成字符串s,就是问物品能不能把背包装满
- 动规思路
- 确定dp数组及下标的含义:字符串长度为i的话,dp[i]为true,表示可以拆分为一个或多个在字典中出现的单词
- 确定递推公式:if([j, i] 这个区间的子串出现在字典里 && dp[j]是true) 那么 dp[i] = true
- dp数组的初始化:dp[0]为true,下标非0的dp[i]初始化为false
- 确定遍历顺序:本题求的是排列,一定是先遍历背包,再遍历物品