- 题目
给你一个字符串 s,找到 s 中最长的回文子串。 - 示例
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
- dp[i][j]表示下标从i到j的子字符串是否是回文串
- 如果下标从i到j的子字符串是回文串则
s.charAt(i)必然等于s.charAt(j),也就是s.charAt(i) == s.charAt(j)
下标从i+1到j-1的子字符串是回文串,也就是dp[i+1][j-1] == true - 但下标从i+1到j-1可能不是合法的字符串下标(只有一个字符或者没有字符),也就是i+1>=j-1时,不用判断下标从i+1到j-1的子字符串是否是回文串
class Solution {
public String longestPalindrome(String s) {
int n = s.length();
boolean[][] dp = new boolean[n][n];
String res = "";
for (int j = 0; j < n; j++) {
for (int i = 0; i <= j; i++) {
if (s.charAt(i) == s.charAt(j)
&& (i + 1 >= j - 1 || dp[i+1][j-1])) {
dp[i][j] = true;
if (res.length() < j - i + 1) {
res = s.substring(i,j + 1);
}
}
}
}
return res;
}