给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
方法一:暴力法
class Solution {
public String longestPalindrome(String s) {
int max = 0;
String ans = "";
for(int i=0;i<s.length();i++){
for(int j=i+1;j<=s.length();j++){
String temp = s.substring(i,j);
if(isHuiWen(temp) && temp.length()>max){
ans = temp;
max = temp.length();
}
}
}
return ans;
}
public boolean isHuiWen(String s){
int length = s.length();
for(int i=0;i<length/2;i++){
if(s.charAt(i)!=s.charAt(length-1-i)) return false;
}
return true;
}
}
方法二:扩展中心法
class Solution {
int left = 0; //记录字符串的索引
int max = 0; //记录最大长度
public String longestPalindrome(String s) {
for(int i=0;i<s.length();i++){
expend(s,i,i);
expend(s,i,i+1);
}
return s.substring(s,left,left+max);
}
public void expend(String s , int i ,int j){
while(i>=0 && j<s.length() && s.charAt(i)==s.charAt(j)){ //向左右扩展
i--;
j++;
}
if(j-i-1>max){ //字符串长度大于max 进行替换
max = j-i-1;
left = i+1;
}
}
}