给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案
示例 2:
输入:s = “cbbd”
输出:“bb”
class Solution {
public String longestPalindrome(String s) {
boolean[][] dp = new boolean[s.length()][s.length()];
// 步长为0
for (int i = 0; i < s.length(); ++i) dp[i][i] = true;
// 步长为1
int step = 1;
for (int i = 0; i + step < s.length(); ++i) {
if (s.charAt(i) == s.charAt(i + step)) dp[i][i + step] = true;
else dp[i][i + step] = false;
}
// 步长为2
for (step = 2; step < s.length(); ++step) {
for (int i = 0; i + step < s.length(); ++i) {
if (s.charAt(i) == s.charAt(i + step)) dp[i][i + step] = dp[i + 1][i + step - 1];
else dp[i][i + step] = false;
}
}
int max = 0, start = 0;
for (step = 0; step < s.length(); ++step) {
for (int i = 0; i + step < s.length(); ++i) {
if (dp[i][i + step] && (step + 1) > max) {
max = step + 1;
start = i;
}
}
}
return s.substring(start, start + max);
}
}