class Solution {
public String longestPalindrome(String s) {
int n = s.length();
String ans = "";
int maxLen = 0;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j <= n; j++) {
String str = s.substring(i, j);
if (satisfy(str) && (j - i) > maxLen) {
maxLen = j - i;
ans = str;
}
}
}
return ans;
}
public boolean satisfy(String s) {
int i = 0, j = s.length() - 1;
while (i < j) {
if (s.charAt(i) != s.charAt(j)) return false;
i++;
j--;
}
return true;
}
}
方法二:动态规划
class Solution {
public String longestPalindrome(String s) {
int n = s.length();
boolean[][] dp = new boolean[n][n];
String ans = "";
int maxLen = 0;
for (int i = n - 1; i >= 0; i--) {
for (int j = i; j < n; j++) {
if (s.charAt(i) == s.charAt(j) && (j - i <= 2 || dp[i + 1][j - 1])) {
dp[i][j] = true;
if (j - i + 1 > maxLen) {
ans = s.substring(i, j + 1);
maxLen = j - i + 1;
}
}
}
}
return ans;
}
}
方法三:中心拓展
class Solution {
public String longestPalindrome(String s) {
int n = s.length();
String ans = "";
int maxLen = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j <= 1; j++) {
int left = i;
int right = i + j;
while (left >= 0 && right < n && s.charAt(left) == s.charAt(right)) {
if (right - left + 1 > maxLen) {
maxLen = right - left + 1;
ans = s.substring(left, right + 1);
}
left--;
right++;
}
}
}
return ans;
}
}
方法一:暴力求解class Solution { public String longestPalindrome(String s) { int n = s.length(); String ans = ""; int maxLen = 0; for (int i = 0; i < n; i++) { for (int j = i + 1; j <= n; j++) { ..