给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:
输入: “cbbd”
输出: “bb”
思路:动态规划,dp[i][j]
表示i-j
是否为回文字符串,若s[i]==s[j]||j-i<=2
,dp[i][j]=dp[i+1][j-1]
。
public String longestPalindrome(String s) {
boolean [][] dp=new boolean[s.length()][s.length()];
int len=-1;
String res="";
for(int j=0;j<s.length();j++){
for(int i=0;i<=j;i++){
if(s.charAt(i)==s.charAt(j)&&((j-i<=2)||dp[i+1][j-1])){
dp[i][j]=true;
if(len<j-i+1){
len=j-i+1;
res=s.substring(i,j+1);
}
}
}
}
return res;
}