原题链接
思路:动态规划
dp[i][j] :i 代表 s 的起点,j 代表 s 的终点
(P就是 dp的意思)
class Solution {
public String longestPalindrome(String s) {
int n = s.length();
String res = "";
boolean[][] dp = new boolean[n][n];
for(int i = n - 1;i >= 0;i--) {//当前子串的起点
for(int j = i;j < n;j++) {//当前子串的终点
// j - i < 2说明当前子串长度为 0 或 1,那肯定是回文串,
//dp[i + 1][j - 1]表示 dp[i][j]的子串,这两个条件都旨在判断 dp[i][j]的子串是回文串
dp[i][j] = s.charAt(i) == s.charAt(j) && (j - i < 2 || dp[i + 1][j - 1]);
// dp[i][j]是回文串 且 长度更大,则更新结果串
if(dp[i][j] && j - i + 1 > res.length()) res = s.substring(i, j + 1);
}
}
return res;
}
}