题解 | #最长回文子串#TOP73
abcd ,判断a和d是否相等,中间0 、 1 个数,那么就是回文,否则中间bc是回文,abcd就是回文
import java.util.*;
public class Solution {
public int getLongestPalindrome(String A) {
// write code here
if (A == null) {
return 0;
}
if (A.length() <= 1) {
return A.length();
}
int n = A.length();
char[] data = A.toCharArray();
int right = 0, left = 0;
//dp[i][j] 表示i到 j是否有回文子串
boolean[][] dp = new boolean[data.length][data.length];
//从后往前遍历 第一次遍历 (n-2 , n-1)是否是回文
//第二次 (n-3, n-2) 是不是回文(n-3, n-1)是不是回文
for (int i = n - 2; i >= 0; i--) {
dp[i][i] = true;
for (int j = i + 1; j < data.length; j++) {
//是回文 i .. j
if (data[i] == data[j] &&
//i j ,i x j, 两种情况
(j - i < 3 ||
// i x x j,
( dp[i + 1][j - 1]))) {
dp[i][j] = true;
}
if (dp[i][j] && (right - left) < (j - i)) {
left = i;
right = j;
}
}
}
return right - left + 1;
}
}