一、算法概念
- 动态规划算法是一种解决
多阶段决策问题
的方法。它将一个问题分解为多个子问题,并逐个求解子问题的最优解,最后得到原问题的最优解。
二、基本思想
- 动态规划算法的核心思想是通过
存储中间结果
来避免重复计算
。在解决问题的过程中,会利用已经求解过的子问题的最优解来求解当前问题的最优解。 - 动态规划算法可以解决很多实际问题,例如背包问题、最长公共子序列问题、最短路径问题等。它具有时间复杂度低、解决问题的范围广等优点,但在问题的
状态转移方程的建立
和初始状态的确定
上需要一定的技巧和经验。
三、算法步骤
- 定义问题的状态:将原问题拆分为若干个子问题,并定义每个子问题的状态。
- 定义问题的状态转移方程:通过分析子问题之间的关系,建立起子问题之间的转移关系,即求解当前问题的最优解的公式。
- 定义初始状态:确定最简单的子问题的最优解,作为初始状态。
- 自底向上求解:从初始状态开始,按照状态转移方程逐步求解子问题的最优解,最终得到原问题的最优解。
四、简单实现示例【最长回文子串】
题干:
给你一个字符串 s,找到 s 中最长的回文子串
示例:
示例 1:
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
示例 2:
输入:s = “cbbd”
输出:“bb”
提示:
1 <= s.length <= 1000
s 仅由数字和英文字母组成
解法:
class Solution {
public String longestPalindrome(String s) {
if(s.length()==1){
System.out.println(s);
}
int start = 0;
int maxLen = 1;
char[] chars = s.toCharArray();
if(chars