- 思路:每个回文字符串去掉左右两端依赖是回文字符串(len==1的特例)
- 反向推出如果一个字符串是回文字符串,两端以内必须是回文&&两端必须相等
- 以i为x,j为y建立dp表。i为回文数组左端,j为右端
- 特殊位置i=j时len=1,都是回文。i+1=j时,len=2,如果i==j则是回文。
- 普遍位置的依赖关系
- if(arr[i]= =arr[j]&&ap[i+1][j-1]= =true)dp[i][j]=true
- 因为依赖左下角,所以从右下角开始,从左往右填表
-
代码
public static boolean[][] createCheckMap(char[] str, int N) {
boolean[][] ans = new boolean[N][N];
for (int i = 0; i < N - 1; i++) {
ans[i][i] = true;
ans[i][i + 1] = str[i] == str[i + 1];
}
ans[N - 1][N - 1] = true;
for (int i = N - 3; i >= 0; i--) {
for (int j = i + 2; j < N; j++) {
ans[i][j] = str[i] == str[j] && ans[i + 1][j - 1];
}
}
return ans;
}
```