算法笔记——动态规划法

这是一道比较有趣的动态规划法的题。
给定一个字符串s和一个String列表wordDict,判断字符串是否可以由列表中的元素组成。
算法笔记——动态规划法_第1张图片
dp[i]的含义即字符串截取(0,j)是否可以由列表中的元素组成,由此迭代至最终的整个字符串。
情况一:如果字符串截取(0,j-1)本身是列表的一个元素,则dp[j]=true
情况二:如果字符串截取(0,j)由列表中的两个元素组成,假设分别是(0,i-1)和(i,j),那么dp[i]在之前的情况一就使dp[i]=true,遍历dp[0]到dp[j-1],只有dp[0]和dp[i]为true,是false的跳过,那么只考虑对应剩下的字符串是否包含在列表中即可。
更复杂的情况,也由以上迭代而成。

动态规划法的核心是初始化和转移方式,就类似数学归纳法,初始条件和转移方程都成立就可以推导出复杂的情况。这里的转移方式是用一个布尔值的数组判断某个元素之前的字符串是否可以由列表中的元素组成,从而迭代出最终结果。

你可能感兴趣的:(算法,动态规划法)