1. 程式人生 > >最長回文字串【暴力】

最長回文字串【暴力】

最長 pan 符號 bsp 多個 post gets getchar() %d

題目大意:

輸入一個字符串,求出其中最長的回文子串。子串的含義是:在原串中連續出現的字符串片段。回文的含義是:正著看和倒著看相同,如abba和yyxyy。在判斷時,忽略所有標點符號和空格,且忽略大小寫,但輸出應保持原樣(在回文串的首部和尾部不要輸出多余字符)。輸入字符串占據一行,長度不超過5000。輸出最長的回文串,如果有多個,輸出起始位置最靠左的。

樣例輸入:Confuciuss say: Madam, I’m Adam.

樣例輸出:Madam, I’m Adam

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define
MAXN 5000 + 10 char buf[MAXN], s[MAXN]; int p[MAXN]; // 記錄字母在buf中的位置 int main(){ int n, m = 0, max = 0; int i, j, k, x = 0, y = 0; fgets(buf, sizeof(buf), stdin); n = strlen(buf); //預處理字符串 for (i = 0; i < n; i++) if (isalpha(buf[i])) { p[m] = i; s[m
++] = toupper(buf[i]); } //printf("%s\n%s\n", buf, s); for (i = 0; i < m; i++) for (j = i; j < m; j++) { int ok = 1; for (k = i; k <= j; k++) if (s[k] != s[j - (k - i)]) ok = 0; if (ok && max < j - i + 1
) { max = j - i + 1; x = p[i]; y = p[j]; } } printf("%d\n", max); for (i = x; i <= y; i++) printf("%c", buf[i]); // getchar(); return 0; }

2018-03-29

最長回文字串【暴力】