馬拉車伕演算法

2021-10-05 14:22:37 字數 760 閱讀 3680

這個演算法是求最長的回文字串的

在找之前需要將給定的字串進行處理,在每個字元見加入#確保最後得到的字串的長度是偶數。

即使進行暴力運算也需要將字串進行處理,不然偶數的字串不好處理。

package code_01;

public

class

manacher

public

static

intmanacheralgorithms

(string s)

char

chararr =

manacherstring

(s);

int[

] parr =

newint

[chararr.length]

;int c =-1

;int r =-1

;int max = integer.min_value;

for(

int i =

0; i != chararr.length; i++)if

(i + parr[i]

> r)

max = math.

max(max, parr[i]);

}return max -1;

}public

static

char

manacherstring

(string str)

return res;

}}

馬拉車演算法

思路筆記 上述情況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 的暴力演算法,馬拉車演算法無疑是求解最長回文子串的最優選擇。最長回文子串分為偶數串和奇數串,為了避免這些問題,馬...

馬拉車演算法

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 題意在給定的字串中找...