class Solution {
public String longestPalindrome(String s) {
if("".equals(s)){//如果是空字符串直接返回本省
return s;
}
char[] cs=s.toCharArray();//将输入的字符串转成数组处理
String start=String.valueOf(cs[0]);//用于存放当前最长的字符串回文
for(int i=0;i<cs.length;i++){//依次便利
if(start.length()>cs.length-i){//如果剩余长度比当前回文短,不必要循环了
break;
}
String temp=getFor(i,cs);//获取回文
if(start.length()<temp.length()){//比较获取到的回文
start=temp;
}
}
return start;
}
//ghgabccba
//abcba
public String getFor(int index,char[] cs){//以cs[index]为首字母获取回文
String start=String.valueOf(cs[index]);
for(int i=cs.length-1;i>index;i--){
if(cs[index]==cs[i]){
int sumT=i+index;
int end=i;
if(isOk(sumT%2==0?sumT/2:sumT/2+1,cs,end,sumT%2)){//找到回文子串index-i
return new String(cs,index,i+1-index);
}
}
}
return start;
}
public boolean isOk(int m,char[] cs,int end,int idk){
if(idk==0){//奇数项
for(int i=0;i+m<=end;i++){
if(cs[m-i]!=cs[m+i]){
return false;
}
}
//走完循环
return true;
}else{
for(int i=0;i+m<=end;i++){
if(cs[m-i-1]!=cs[m+i]){
return false;
}
}
//走完循环
return true;
}
}
}