1. 程式人生 > >7-64 最長對稱子串(25 分)

7-64 最長對稱子串(25 分)

題目:

對給定的字串,本題要求你輸出最長對稱子串的長度。例如,給定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; }