回文串是指aba、abba、cccbccc、aaaa這種左右對稱的字串。
輸入乙個字串str,輸出str裡最長回文子串的長度。
input
輸入str(str的長度 <= 100000)output
輸出最長回文子串的長度l。input示例
daabaacoutput示例
5相關問題
約束性較大基本上用於求最大回文串字元 n(o)複雜度。
字串分為奇偶串,但預處理一下可以全部變為奇串。在每兩各自符之間加乙個特殊符號,最前面需要加字元因為有越界情況。
(2×id-i)時可能越界。
#include#include#include#includeconst int maxn =1000010;
using namespace std;
char new_l[maxn<<1];
char old_l[maxn];
int p[maxn<<1];
int manacher()
{ int i,id=0,mx=0;//mx表示以id為中心的回文串的右邊長度
int max_len=0;
for(i=1;new_l[i];i++)
{ if(mx>i) p[i]=min(p[2*id-i],mx-i);//因為回文串的長度如果小於最大回文串的,(2*id-i)表示與i關於id對稱的字串的長度,而此時的長度最少等於d[2*id-i];
else p[i]=1;
while(new_l[i-p[i]]==new_l[i+p[i]]) p[i]++;
if(mx>old_l;
int j=2;
int len=strlen(old_l);
new_l[0]='$';
new_l[1]='#';
for(int i=0;i這個大佬部落格有詳細
51nod1089最長回文子串V2
1089 最長回文子串 v2 manacher演算法 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 回文串是指aba abba cccbccc aaaa這種左右對稱的字串。輸入乙個字串str,輸出str裡最長回文子串的長度。input 輸入str str的長度 1000...
馬拉車演算法
思路筆記 上述情況1和情況2又可以歸結為 i 的回文半徑 和 r i的距離 中小的那個就是i的回文半徑。include include includeusing namespace std string manacherstring string str return res int min int...
馬拉車演算法
馬拉車演算法是一種計算最長回文子串的演算法,以其優秀的線性複雜度聞名於世,相較於o n 2 o n 2 o n2 的dpdp dp演算法和會被特殊資料卡到o n 2 o n 2 o n2 的暴力演算法,馬拉車演算法無疑是求解最長回文子串的最優選擇。最長回文子串分為偶數串和奇數串,為了避免這些問題,馬...