题目描述:
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
思路:
-
暴力算法:
遍历字符串,找到所有子串,然后遍历所有子串判断是否为回文,长度为n的字符串子串有 ( n − 1 ) n / 2 (n-1)n/2 (n−1)n/2个子串,判断子串是否为回文需要的时间为 O ( n ) O(n) O(n),所以暴力算法的总时间复杂度为 O ( n 3 ) O(n^3) O(n3) -
1.动态规划:
实际上我们可以简化匹配过程。假如我们已经知道 abba 是回文,那么在首尾添加相同的字符得到的cabbac也一定是回文。
这里定义 P ( i , j ) P(i, j) P(i,j)
P ( i , j ) = { T r u e 如 果 S [ i : j ] 是 回 文 子 串 F a l s e 其 他 情 况 P(i,j)=\left\{\begin{matrix} True & 如果S[i:j]是回文子串\\ False & 其他情况 \end{matrix}\right. P(i,j)={
TrueFalse如果S[i: