7-64 最长对称子串 (25 分)
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?
,最长对称子串为s PAT&TAP s
,于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:
Is PAT&TAP symmetric?
输出样例:
11
#include <stdio.h>
int count (char *str);
int main () {
char str[1001];
gets(str);
int cnt = count(str);
printf ("%d",cnt);
return 0 ;
}
int count (char *str){
int i,j,t1,t2,result=1,t; //result 结果最小为1
for ( i=0; i<strlen(str)-1; i++ ){
for ( j=strlen(str)-1; j>=i; j--){
if (str[i] == str[j]){ //从后往前找一个相同字符
t1 = i;
t2 = j;
while(t1 <= t2){ //判断是否是对称字符串
if ( str[++t1] != str[--t2] )
break;
}
if ( t1>=t2 && j-i+1 > result ) //找到对称字符串计算长度并且长度更长
result = j - i + 1;
}
}
}
return result ;
}