问题描述:读入一个全由小写英文构成的字符串,求出其中最大的回文字符串,回文串是指正着看和反着看相同,如abba和yyxyy,以及helleh。
首先第一行输入一个整数T(T<=100)表示组数,接着有t组测试数据,每组数据占一行,是一个长度不超过1000的全由小写字母构成的字符串
对应每组输入,输出最长的回文子串,如果有多个最长子串,则输出下标最小的那个。
基本思路:枚举所有子串(起点和长度)进行判断
封装为一个判断是否为回文子串的函数即可,一一遍历,此时注意与回文本身的奇偶关系不大,函数内部只需要到n/2-1的位置即可
具体代码如下
#include<stdio.h>
#include<string.h>
#define N 1002
int is_hu_wen(char s[], int index, int n) {
int i;
for (i = 0; i < n / 2; i++)//到n/2-1的位置即可
if (s[i + index] != s[index + n - i - 1])
return 0;
return 1;
}
int main()
{
int t;
scanf("%d", &t);
while (t--) {
char s[1002];
int i, j, k = 1, n, index = 0;//最短回文是一个字符
scanf("%s", s); n = strlen(s);
for (i = 0; i < n - 1; i++) {
for (j = 2; j <= n - i; j++) {
if (is_hu_wen(s, i, j) == 1) {//如果是回文
if (j > k) {//如果比已经发现的更长
k = j; index = i;
}
}
}
}
for (i = 0; i < k; i++)//输出找到最长回文串
printf("%c", s[index + i]);
printf("\n");
}
return 0;
}