这题实在是太暴力了,其中好像有一点点贪心算法,judge函数O(n)判断回文,发现其实不管奇数偶数都一样
#include <iostream>
#include <cstring>
using namespace std;
int judge(char s[],int start,int end)
{
//判断start 到 end 是不是回文
int str = strlen(s);
if(str%2==0)
{
// printf("%d\n",(start+end)/2);
int count = 0;
for(int i=start;i<(start+end)/2+1;i++)//偶数
{
if(s[i]!=s[end-count])
{
return 0;
}
count++;
}
return 1;
}
else if(str%2!=0)
{
int count = 0;
for(int i=start;i<(start+end)/2+1;i++)//偶数
{
if(s[i]!=s[end-count])
{
return 0;
}
count++;
}
return 1;
}
}
int main(void)
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
char s[105];
scanf("%s",s);
int flag = 1;
for(int i=0;i<strlen(s);i++)
{
for(int j=strlen(s)-1;j!=i;j--)
{
if(judge(s,i,j)==1)
{
for(int k=i;k<=j;k++)
{
printf("%c",s[k]);
}
flag = 0;
printf("\n");
break;
}
}
if(i==strlen(s)-1)
{
printf("%c\n",s[0]);
break;
}
if(!flag)
{
break;
}
}
}
}