给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
```java
package com.yy.day05;
/**
* @Author: yyang16
* @Date: 2021/6/6 21:15
*/
public class Solution {
public String longestPalindrome(String s) {
int len = s.length();
if(len < 2){
return s;
}
int maxlen = 1;
int begin = 0;
// dp[i][j] 表示 s[i..j] 是否是回文串
boolean[][] dp = new boolean[len][len];
for (int i = 0;i < len; i++){
dp[i][i]= true;
}
char[] charArray = s.toCharArray();
//递推开始
//先枚举字串长度
for (int L=2; L <= len;L++){
for (int i=0;i<len;i++){
int j= L+i-1;
if (j>=len){
break;
}
if (charArray[i] !=charArray[j]){
dp[i][j]=false;
}else {
if (j-i<3){
dp [i][j]=true;
}else {
dp[i][j]=dp[i+1][j-1];
}
}
// 只要 dp[i][L] == true 成立,就表示子串 s[i..L] 是回文,此时记录回文长度和起始位置
if (dp[i][j]&&j-i+1>maxlen){
maxlen=j-i+1;
begin=i;
}
}
}
return s.substring(begin,begin+maxlen);
}
}