LeetCode算法题目_5
题目描述
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
解决方案
中心扩展算法
事实上,只需使用恒定的空间,我们就可以在 O(n^2) 的时间内解决这个问题。
我们观察到回文中心的两侧互为镜像。因此,回文可以从它的中心展开,并且只有 2n - 1 个这样的中心(包括以一个元素为中心和两个元素为中心两种情况)。
我的算法如下,可能由于static数组问题,总会报错,不过单独测试没有问题。后续继续探究。
char * longestPalindrome(char * s){
int index = 0;
static char max[1000];
int length = 1;
int length1 = 1;
int i,j;
int n = strlen(s);
for(i = 0; i< n; i++)
{
j = 1;
length1 =1 ;
while(((i-j) >= 0) && ((i+j) <= n-1))
{
if(((i-j) >= 0) && ((i+j) <= n-1) &&(s[i-j] == s[i+j]))
//if((s[i-j] == s[i+j]))
{
length1 += 2;
j++;
}
else
{
if(length1>length)
{
index = i-j;
length = length1;
}
break;
}
}
}
for(i = 0; i< n-1; i++)
{
if(s[i] = s[i+1])
{
j = 1;
length1 =2 ;
while((i-j >= 0) && (i+1+j <= n-1))
{
if(s[i-j] == s[i+1+j])
{
length1 += 2;
j++;
}
else
{
if(length1>length)
{
index = i-j;
length = length1;
}
break;
}
}
}
}
//char * max;
//char *max = (char*)malloc(sizeof(char) * 1000);
for(i = 0; i < length; i++)
{
if((index + i) <n && (index + i) >= 0)
max[i] = s[index+i];
}
//max[length] = '\0';
return max;
}