给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
思路:动态规划
class Solution {
public String longestPalindrome(String s) {
int length = s.length();
boolean [][]dp = new boolean[length][length];
int max = -1;
String res = "";
for(int i = length - 1;i>=0;i--)
{
for(int j = i;j<length;j++)
{
dp[i][j] = (s.charAt(i)==s.charAt(j)) && (j - i < 2 || dp[i+1][j-1]);
if(dp[i][j] && j - i > max)
{
res = s.substring(i,j+1);
max = j - i;
}
}
}
return res;
}
}
暴力法超时
class Solution {
public String longestPalindrome(String s) {
String res = "";
for(int i=0;i<s.length();i++) {
for(int j=s.length()-1;j>=i;j--) {
if(j-i<res.length())
break;
String temp = s.substring(i,j+1);
if(isReverse(temp)) {
if(temp.length() > res.length())
res = temp;
}
}
}
return res;
}
public boolean isReverse(String str) {
StringBuffer strA = new StringBuffer(str);
return strA.reverse().toString().equals(str);
}
}