啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊我好激動啊!!!!!
我竟然a了!!!!!
好吧,其實這是一道模板題。(要用manacher來做(其實我覺得這演算法名挺好記))
首先,我們發現回文串的長度有奇偶性,為了方便計算,我們在原串上每兩個字元中間新增乙個另外的字元,使原串變為奇數串。我們又發現,由於這道題玄學的 資料,0號位和n*2+2號位必須有其他的亂七八糟的值(不然會多算)。
先上馬吧!
#include
#include
#include
using
namespace std;
const
int h =
1202
;struct node ans[h]
;char s[h]
;int n, len[h <<1]
, t[h <<1]
;string tmp;
void
init()
void
manacher()
while
(t[i - len[i]
]== t[i + len[i]])
len[i]++;
}if(i + len[i]-1
>= r)}}
intmain()
return0;
}
讓我們好好研讀這份**:
mid表示以mid為中心向外延伸的字串,r表示中心為mid的最長回文串的右邊界,len陣列儲存中心為i的最長回文串的半徑(包含點i)。
繼續看看這個遞推式:
首先我們知道,i是一定嚴格大於mid的。所以如果i至於函式最後的賦值,大於等於和大於都沒毛病。(請手推)
另外,我那清奇的碼風得歸功於一組資料:
111好了,我已經心力交瘁了,拜拜!ans:
1111
111
基本演算法練習 回文串
問題描述 即通過加乙個字元,使得字串是否滿足回文串的要求。如下 include include include using namespace std int main string str cin str bool flag false for int i 0 is1 for int j 0 j本...
Python練習 回文字串的判斷
剛開始學python,很多基本方法還不太會用,借用mooc課的練習題目記錄學習。題目內容 給定乙個字串,判斷它是否是回文字串 即類似於peep,12321這樣的對稱字串 如果是輸出true,不是則輸出false。判斷過程中假定只考慮字母和數字字元,而且忽略字母的大小寫和其它符號 如空格 標點符號等 ...
leetcode練習 最長回文子串
給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例一 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案 示例二 輸入 cbbd 輸出 bb 通過substring劃分子串,遍歷所有可能結果。結果效率太低 如圖 class solution ret...