Problem: 5. 最长回文子串
思路
💖 DP
class Solution {
public String longestPalindrome(String s)
{
if (s == null || s.length() == 0)
return "";
int n = s.length();
char[] ss = s.toCharArray();
int maxLen = 1;
int begin = 0;
// 默认为 false
boolean[][] f = new boolean[n][n];// f[i][j] 表示 s的闭区间[i,j] 是否回文
for (int i = 0; i < n; i++)
f[i][i] = true;// 长度为 1 的所有子串都是回文的
for (int k = 2; k <= n; k++)//先枚举长度
{
for (int i = 0; i < n; i++)//枚举起点
{
int j = k + i - 1;//枚举终点
if (j >= n)//越界
break;
//当前的起点和终点相同;2,3个的情况 || 中间的是回文串
if (ss[i] == ss[j] && (j - i < 3 || f[i + 1][j - 1]))
f[i][j] = true;
if (f[i][j] && j - i + 1 > maxLen)
{
maxLen = j - i + 1;
begin = i;
}
}
}
return s.substring(begin, begin + maxLen);
}
}