void check(char *s,int len,int l,int r,int* start,int* maxlen){
while(l>-1&&r<len&&s[l]==s[r]) l--,r++;
int len0=r-l-1;
if(len0>*maxlen){
*maxlen=len0;
*start=l+1;
}
}
char* longestPalindrome(char* s) {
int len=strlen(s);
if(len<2) return s;
int start=0;
int maxlen=0;
for(int i=0;i<len-1&&len-i>maxlen/2;i++){
check(s,len,i,i,&start,&maxlen);
check(s,len,i,i+1,&start,&maxlen);
}
char* t=(char*)malloc(sizeof(char)*(maxlen+1));
memcpy(t,s+start,sizeof(char)*maxlen);
t[maxlen]='\0';
return t;
}
check从里面开始扩散,看字串是否是回文串,直到扩散到最大就是最长回文子串
O(n2)的时间复杂度,速度还可以