相关标签
一、题目要求
二、题解和代码实现
1.题解
2.代码实现
代码如下(示例):
class Solution {
public String longestPalindrome(String s) {
int len = s.length();
if (len <2){
return s;
}
//创建动态规划dp
boolean[][] dp = new boolean[len][len];
for (int i = 0; i < len; i++) {
dp[i][i] = true; //初始化对角线全部为ture,只用dp 对角线上半部分用于解题
}
int maxCount = 1;//最长回文子串长度
int stat = 0;//最长回文子串长度起始位置
//从列开始修改dp的值
for (int j = 1; j < len; j++) {
for (int i = 0; i < j; i++) {
if (s.charAt(i) != s.charAt(j)){//如果两个值不相等,证明不是回文子串
dp[i][j] = false;
}else {
if (j-i <3){//当i+j 的长度不超过3,说明它肯定是回文子串
dp[i][j] = true;
}else {//当超过3,就需要看它这个长度里面的字符是不是回文子串(也就是左下角的值)
dp[i][j] = dp[i+1][j-1];//根据dp[i][j]的左下角得到dp[i][j]的值
}
}
if (dp[i][j]==true && j-i+1 >maxCount){//当dp[i][j]==true并且j-i+1 >maxCount(当前最长回文子串长度)时
maxCount = j-i+1;//更新当前最长回味子串长度
stat = i;//更新最长回文子串长度起始位置
}
}
}
return s.substring(stat,stat+maxCount);
}
}