最长回文子串
最长回文子串
https://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af?tpId=117&tab=answerKey
题目描述
对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。
给定字符串A以及它的长度n,请返回最长回文子串的长度。
示例1
输入
"abc1234321ab",12
返回值
7
思路
1.转移方程容易想,但两个指针的移动方向容易出错。
2.应该A指针向右走,B指针从A开始向左走,目的是B指针扫过的范围A已经走过,才能执行动态规划。
code
import java.util.*; public class Solution { public int getLongestPalindrome(String A, int n) { boolean [][]dp = new boolean[n+1][n+1]; for(int i=0;i<n;i++)dp[i][i]=true; char []chs = A.toCharArray(); int max = 0; for(int i=0;i<n;i++){ for(int j=i;j>=0;j--){ if(j+1==i){ dp[j][i] = chs[j]==chs[i]; if(i-j+1>max)max=i-j+1; }else if(j+1<i){ if(dp[j+1][i-1]==true && chs[j]==chs[i]){ dp[j][i] = true; if(i-j+1>max)max=i-j+1; } else dp[j][i]=false; } } } return max; } }