7-64 最長對稱子串(25 分)
阿新 • • 發佈:2019-02-20
題目:
對給定的字串,本題要求你輸出最長對稱子串的長度。例如,給定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;
}