解题思路:用暴力的方式,定义两个标记i,j,i从字符串的左边开始往右指,j从字符串的右边开始往左指。取中间的字符串存储到另一个字符数组中,每存储完一个字符串,则进行回文字符串的判断。
回文字符串的判断如下:
从字符串的开头遍历到字符串的一半,判断前半部分和后半部分的字符是否相同,若相同,则为回文字符串。
将每个回文字符串的长度记录下来。最后得到最大回文字符串的长度。
源码附上:
#include <iostream>
#include <cstring>
using namespace std;
int judge(char str2[])
{
int i;
int len=strlen(str2);
for(i=0;i<len/2;i++)
{
if(str2[i]!=str2[len-i-1])
{
return -1;
}
}
return 0;
}
int main()
{
char str1[1001];
memset(str1,0,sizeof(str1));
cin>>str1;
int length=strlen(str1);
int i,j,k,num,max=0,temp;
for(i=0;i<length;i++)
{
for(j=length-1;j>i;j--)
{
num=0;
char str2[1001];
memset(str2,0,sizeof(str2));
for(k=i;k<=j;k++)
{
str2[num++]=str1[k];
}
if(judge(str2)==0)
{
temp=strlen(str2);
if(temp>max)
{
max=temp;
}
}
}
}
cout<<max<<endl;
return 0;
}