解題思路:固定從頭開始的第一個字元串,一個從尾開始,分别周遊每一個字元,看是否與固定的字元組成最長回文字元串。
逾時逾時啊,有點想不通啊!
隔了一天又仔細想了想,感覺是思考方向的問題,解題思路沒有錯,但是本末倒置了。
回文字元串是中心對稱的,從中心開始,向字元兩端擴散,下面的算法是從兩邊開始檢測,往中間聚攏,導緻過多的無效比對。
char * longestPalindrome(char * s)
{
int i,j;
int start,len;
int length = strlen(s);
if(length < 2)
return s;
len = 0;
for(i = 0; i < length; i++)
{
for(j = length; j > i; j--)
{
int m = i;
int n = j;
while((s[m++] == s[n--]) && (m < n));
if((s[m-1] == s[n+1]) && m-n <= 2 )
{
if(len < j - i + 1)
{
len = j - i + 1;
start = i;
if((len > length / 2) && (i > length / 2 + 1))
{
i = length;
break;
}
}
}
}
}
if(len == 0)
{
s[1] = '\0';
return s;
}
s[start+len] = '\0';
return s+start;
/*char* c = (char*)malloc(sizeof(char)*(len+2));
if(len == 0)
{
c[0] = s[0];
c[1] = '\0';
return c;
}
strncpy(c, &s[start], len);
c[len] = '\0';
int k = 0;
while(len-- > 0)
{
c[k] = s[start+k];
k++;
}
c[k] = '\0';
return c;*/
}