2、长度为N(N很大)的字符串,求这个字符串里的最长回文子串。
#include<stdio.h>
#include<string.h>
void search(char *str1,char *str2);
int Is_reverse(char *start ,char *end );
void save(char *str2,char *start,char *end);
int
main (int argc, char *argv[])
{
char str1[100]="gfdh123414321hfdfds1234567887654321ghfdj",str2[100];
//gets(str1);
search(str1,str2);
puts(str2);
return 0;
}
int Is_reverse(char *start ,char *end )
{
char *p=start,*q=end;
while(p<q)
{
if(*p==*q)
{
p++;
q--;
}
else return 0;
}
return 1;
}
void search(char *str1,char *str2)
{
char *start=str1,*end=str1+strlen(str1)-1;
int count=0;
while(*start)
{
while(start<end)
{
if((Is_reverse(start,end))==1&&(end-start>count))
{
count=end-start;
save(str2,start,end);
break;
}
end--;
}
start++;
end=str1+strlen(str1)-1;
if(end-start<count) break;
}
}
void save(char *str2,char *start,char *end)
{
char *p=str2;
while(start<=end)
{
*p=*start;
start++;
p++;
}
*p='\0';
}