题目描述
class Solution {
public int begin=0;//起始点
public int maxLength=0;//最大长度
public String longestPalindrome(String s) {
char[] strs=s.toCharArray();//转化为字符数组
int n=strs.length;//记录长度
expandFromCenter(strs,n/2,0);//中心展开
return new String(strs,begin,maxLength);//截断字符串-回文
}
public void expandFromCenter(char[] strs,int index,int direction){
int n =strs.length;//字符串长度
int i=index-1;//中心展开向后
int j=index+1;//中心展开向前
while(i>=0&&strs[i]==strs[index]){//向前极限
i--;
}
while(j<n&&strs[j]==strs[index]){//向后极限
j++;
}
int x=i;
int y=j;//定位x和y
while(x>=0&&y<n&&strs[x]==strs[y]){
x--;
y++;//前后展开
}
if(y-x-1>maxLength){//记录最长的
begin=x+1;//记录开始
maxLength=y-x-1;//记录最大长度
}
//调节方向,递归
if(direction>=0&&(n-j)*2>maxLength){
expandFromCenter(strs,j,1);
}
if(direction<=0&&(i+1)*2>maxLength){
expandFromCenter(strs,i,-1);
}
}
}