我的LeetCode代码仓:https://github.com/617076674/LeetCode
原题链接:https://leetcode-cn.com/problems/word-break-ii/description/
题目描述:
知识点:动态规划,回溯,记忆化搜索
思路一:动态规划(在LeetCode中提交会超时)
本题在LeetCode139——单词拆分的基础上进一步提高了要求,因此,除了LeetCode139——单词拆分中的状态定义和状态转移方程外,还需额外新增一个状态定义和状态转移方程,如下所述。
状态定义:
g(x, y) -------- s中范围在[x, y]内的子串能返回的所有可能的句子
状态转移:
如果s中范围在[x, y]内的子串出现在字典中,那么整个子串就是一个可能的返回的句子。
另外,我们需要去看s中范围在[x, j]和[j + 1, y],j = x, ..., y内的两个子串是否能被拆分,一旦发现两个子串均能被拆分的情况,就需要根据g[x, j]和g[j + 1, y],j = x, ..., y组合生成g[x, y]。
为了去重,用Set集