
求解代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
public int getLongestPalindrome (String A) {
if(A==null||A.length()==0){
return 0;
}
int n = A.length();
char[] str = A.toCharArray();
int max = 1;
boolean[][] dp = new boolean[n][n];
for(int i=0;i<n;i++){
dp[i][i]=true;
}
for(int i=1;i<n;i++){
for(int j=0;j<i;j++){
if(str[i]!=str[j]){
dp[j][i]=false;
}else{
if(i-j<=1){
dp[j][i]=true;
}else{
dp[j][i]=dp[j+1][i-1];
}
if(dp[j][i]){
max=Math.max(max, i-j+1);
}
}
}
}
return max;
}
|
小贴士
1.dp[j][i] 表示子串 A[j..i](闭区间)是否为回文,必须保证 j ≤ i
- 判断规则:
- 首尾不等 → 非回文
- 首尾相等 + 长度≤2 → 必回文
- 首尾相等 + 长度 > 2 → 看中间子串是否回文