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

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

訓練的時候寫不出來這道題,(其實我看到字串的題就頭大)

不過看完題解感覺還好。

分析一下:

我們從起點開始出發,但是要分兩種情況。

迴文顯然存在兩種情況:
一種是像 abcdcba ,這樣的中間一個對稱軸的迴文
另一種則是abccbd ,這樣的中間對稱軸為空氣的迴文

所以我們在走的過程中。分別向兩邊擴散,看看能走到多遠,再取最大值即可。

但是我不知道為什麼int 不行, 非要用 unsigned long long 或者 size_t...

#include <iostream>
#include <cstring>
using namespace std;
typedef unsigned 
long long ULL; int main() { ULL ans = 1; string line; getline(cin, line); int leng = line.size(); for(int i = 0; i < leng; i++) // 以中間空氣對稱 { ULL l = i, r = i + 1; while(l >= 0 && r <= leng && line[l--] == line[r++]); ans = max(ans, r - l - 3
); } for(int i = 1; i < leng; i++) // 以Line[i]為軸對稱 { ULL l = i - 1, r = i + 1; while(l >= 0 && r <= leng && line[l--] == line[r++]); ans = max(ans, r - l - 3); } cout << ans << endl; return 0; }
不要羨慕別人喝的飲料有各種顏色,其實未必有你的白開水解渴,