题目
给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
示例 3:
输入:s = "a"
输出:"a"
示例 4:
输入:s = "ac"
输出:"a"
提示:
1 <= s.length <= 1000
s 仅由数字和英文字母(大写和/或小写)组成
代码
public class leetcode5 {
public static void main(String[] args) {
String s="babad";
System.out.println(longestPalindrome1(s));
}
public static String longestPalindrome(String s) {
if(s==null || s.length()==0) return s;
String res="";
boolean [][] dp=new boolean[s.length()][s.length()];
int max=0;
for (int i = 0; i <s.length() ; i++) {
for (int j = 0; j <=i ; j++) {
dp[j][i]=s.charAt(i)==s.charAt(j)&&((i-j<=2)|| dp[j+1][i-1]);
if(dp[j][i]){
if(i-j+1>max){
max=i-j+1;
res=s.substring(j,i+1);
}
}
}
}
return res;
}
static String res="";
public static String longestPalindrome1(String s){
if (s==null || s.length() ==0) return s;
for (int i = 0; i <s.length() ; i++) {
longest(s, i,i);
longest(s,i,i+1);
}
return res;
}
public static void longest(String s,int left,int right){
while (left>=0 && right<s.length() && s.charAt(left)==s.charAt(right)){
left--;
right++;
}
String cur=s.substring(left+1, right);
if (cur.length()>res.length())
res=cur;
}
}