求出:
- 最长的长度
- 输出字符串
解法:动态规划,具体解释在代码里面:加油P
import java.util.*;
public class Solution {
public int getLongestPalindrome(String A, int n) {
// write code here
boolean[][] dp = new boolean[n][n];//明确dp 数组定义: 从i 到j 范围内是不是回文串
int max = 0;
for(int len = 0 ; len < n ; len ++){//遍历背包,长度。从0 开始到最大。
for(int i = 0; i < n - len ; i++){//防止j 越界
int j = i + len ;
if(A.charAt(i) == A.charAt(j)){
if(len == 0 || len == 1){
dp[i][j] = true;
}else{
dp[i][j] = dp[i+1][j-1];//往里缩一下,如果是真,那么这个i, j 范围也是真;
}
if(dp[i][j]){
max = Math.max(max, len+1);
}
}
}
}
return max;
}
}
class Solution {
public String longestPalindrome(String A) {
int max = 0;
int n = A.length();
boolean[][] dp = new boolean[n][n];//明确dp 数组定义: 从i 到j 范围内是不是回文串
int left = 0;
int right = 0;
for(int len = 0 ; len < n ; len ++){//遍历背包,长度。从0 开始到最大。
for(int i = 0; i < n - len ; i++){
int j = i + len ;
if(A.charAt(i) == A.charAt(j)){
if(len == 0 || len == 1){
dp[i][j] = true;
}else{
dp[i][j] = dp[i+1][j-1];//往里缩一下,如果是真,那么这个i, j 范围也是真;
}
if(dp[i][j]){
max = Math.max(max, len+1);
left = i; //棒,在牛客17题基础上加个这个就行了。
right = max + i;
}
}
}
}
return A.substring(left,right); //这是截取子串
// return max; //这是求最大长度
}
}