给定一个字符串
s
,找到s
中最长的回文子串。你可以假设s
的最大长度为 1000。输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。
输入: "cbbd" 输出: "bb"
首先,必须要明确最长回文子串的含义,简单来说就是 从前往后读和从后往前读 是一样的,按照我们动态规划解题3步骤:定义数组元素含义,找出数组元素间的含义和找出数组的初始值。
- 定义数组元素含义
我们既然要找到最长的回文子串,那么也就必须遍历字符串s中的所有子串,一个方式就是用二维数组dp[i][j]来表示字符串s中第i到第j个字符的子串(j>=i,i取值为0至n-1),其取值为bool值,true代表着是回文子串,false代表着不是回文子串。
- 找出数组元素间的含义
根据回文子串的含义,如果dp[i][j]是回文子串的话,那么在这个回文子串的前后加上相同的字符,那么就构建了一个新的回文子串dp[i-1][j-1],示意图如下:
<