馬拉車演算法

2021-09-25 02:31:32 字數 820 閱讀 5351

思路筆記: 

上述情況1和情況2又可以歸結為:【i』的回文半徑】和【r-i的距離】中小的那個就是i的回文半徑。 

#include#include#includeusing namespace std;

string manacherstring(string str)

return res;

}int min(int a, int b)

int max(int a, int b)

int manacher(string str)

if (i + parr[i] > r)

max = max(max, parr[i]);

} return max-1;

}int main()

return 0;

}

應用:如果向字串後面追加字串成為回文串,怎麼新增的字元最少。

例子:abc12321,則新增後abc12321cba

思路:它就是在求包含最後乙個字元情況下最長回文串是多少,再將前面不是的部分逆序過來就是答案。其實就是在找回文右邊界(r),直到回文右邊界到最後乙個字元確定當前的c,利用r將l求出來,然後原字串0~l位置的逆序追加上去即可。

馬拉車演算法

馬拉車演算法是一種計算最長回文子串的演算法,以其優秀的線性複雜度聞名於世,相較於o n 2 o n 2 o n2 的dpdp dp演算法和會被特殊資料卡到o n 2 o n 2 o n2 的暴力演算法,馬拉車演算法無疑是求解最長回文子串的最優選擇。最長回文子串分為偶數串和奇數串,為了避免這些問題,馬...

馬拉車演算法

manacher char s maxn 1 int n,hw maxn 1 int l maxn 1 r maxn 1 void manacher char a n len 2 2 s n 0 int maxr 0,m 0 for int i 1 i n i manacher 題意在給定的字串中找...

馬拉車演算法

馬拉車演算法查詢 字串的最大回文子串。其演算法本質上是中心擴充套件法。中心擴充套件法 vectorv strlen,0 v i 是指以i為中心的回文字串長度的半徑 for int i 1 i strlen 1 i while str i 1 v i str i 1 v i v i 不考慮越界 而馬拉...