动态规划(Dynamic programming)是一种常见而具备很大开发潜力的算法,若要追奔朔源,所谓的动态规划其实就是“借助表格”来记录过去的“状态”,以减小探索未来状态过程中不必要的重复求解步骤(实际上programming在这里就是指表格,而不是编程...).至于该在什么时候用动态规划,这里推荐LeetCode 123. 买卖股票的最佳时机 III 的题解 “一个通用方法团灭 6 道股票问题” ,其中很明确地阐述了动态规划的使用方法。最为重要的部分莫过于“状态、选择和转移”。因本篇侧重于叙述动态规划的优化问题,关于何时应当使用动态规划不多做阐述,简单来说,其中经验性的部分也占据很大比重---“看到一个问题,感觉能够使用动态规划”此类,比如往往在字符串问题上,动态规划的效能要好于深度优先搜索,等等。
优化方法
为了比较具体地叙述动态规划的优化步骤,这里以实际的题目为例。题源为LeetCode 97. 交错字符串。
题目描述如下:
给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。
比如输入 s1 = "aabcc", s2 = "dbbca", <