7-10 最長對稱子串 (25 分)
阿新 • • 發佈:2022-03-01
訓練的時候寫不出來這道題,(其實我看到字串的題就頭大)
不過看完題解感覺還好。
分析一下:
我們從起點開始出發,但是要分兩種情況。
迴文顯然存在兩種情況:
一種是像 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; }