给定一个字符串 s
,找到 s
中最长的回文子串。你可以假设 s
的最大长度为 1000。
示例 1:
输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd" 输出: "bb"
判断i到j是不是一个回文串你只需要判断s.charAt(i)与s.charAt(j)是否相等,如果相等在判断看s.charAt(i+1)与s.charAt(j-1)是否相等,这类问题适合使用动态规划来解决 。
public static String longestPalindrome(String s) {
String res = null;
int n = s.length();
if(n==0 || s==null)
return s;
boolean[][] dp = new boolean[n][n];
for(int i = n-1;i >= 0; i--) {
for(int j = i; j < n; j++) {
/**判断是否为回文串*/
/**如果j-i的值表示j与i之间字母的个数+1(i与j相同除外)
j-i小于3表示i与j之间只有一个字母或者没有字母存在*/
dp[i][j] = s.charAt(i)==s.charAt(j)&&(j-i<3 || dp[i+1][j-1]);
/**判断这个回文串的长度是否大于最长长度*/
if(dp[i][j] && (res==null || res.length()<j-i+1))
{
res = s.substring(i,j+1);
}
}
}
return res;
}