题目:
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?
,最长对称子串为s PAT&TAP s
,于是你应该输出11
。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:
Is PAT&TAP symmetric?
输出样例:
11
代码:
对每一位字符串检查是否为对称轴(奇数)或者对称中心左边的第一个字符(偶数)
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1001
int main(){
//要求输出最大对称子串的长度
//char str[MAX_LEN]="Is PAT&TAP symmetric?";
char str[MAX_LEN];
int i, fore, back, maxSymLen, symLen;
gets(str);
maxSymLen = 1;
for(i=0; i<strlen(str); i++){ //从第二个字符开始
//对称字符串长度为奇数的情况
symLen = 1;
fore=i-1;
back=i+1;
while( fore>=0 && back<strlen(str)){
if(str[fore]==str[back]){
symLen += 2;
}
else{
break;
}
fore--;
back++;
}
if(symLen>maxSymLen){
maxSymLen = symLen;
}
//对称字符串长度为偶数的情况
symLen = 0;
fore=i;
back=i+1;
while( fore>=0 && back<strlen(str)){
if(str[fore]==str[back]){
symLen += 2;
}
else{
break;
}
fore--;
back++;
}
if(symLen>maxSymLen){
maxSymLen = symLen;
}
}
printf("%d\n", maxSymLen);
return 0;
}