最長回文串 馬拉車演算法

2021-10-05 02:34:11 字數 837 閱讀 2717

有兩個長度均為n的字串a和b。可以從a中選乙個可以為空的子串a[l1…r1],b中選乙個可以為空的子串b[l2…r2],滿足r1=l2,然後把它們拼起來(a[l1…r1]+b[l2…r2])。求用這樣的方法能得到的最長回文串的長度。注意:求的不是本質不同的回文串個數哦!!!

解題報告:找兩個之間的最長回文串,只不過我卡了一下午而已,其實很簡單,跑兩遍馬拉車,把兩個字串的len處理出來,開始列舉a的字串的最後乙個點,注意這裡b的i-2是和a[i]是配對的,因為他們之間加了我們之前加過的字元,用tmp存他們的最大值,為什麼呢?是為了減少匹配的次數,當他是最大值的時候不匹配也沒事,因為可以是空串呀

#include

using

namespace std;

const

int n=

100010

;char a[n]

,b[n]

,str[n*2]

,str2[n*2]

;int len1[n*2]

,len2[n*2]

;void

get_str1

(char a)

str[k++]=

'#';

str[k]=0

;}void

get_str2

(char a)

str2[k++]=

'#';

str2[k]=0

;}void

mlc(

char a)

}}void

mlc2

(char a)

}}intmain()

cout<}

最長回文串(馬拉車演算法)

最長回文子串 manacher演算法 馬拉車演算法 馬拉車演算法需要計算以每個字元為中心的回文串半徑。並記錄最右邊界 馬拉車演算法基於這樣乙個事實,從回文串的中心到兩邊是對稱的,意味著以兩邊對稱的字元為中心的回文串半徑相等 在不超過最右邊界的情況下,如果超出就需要擴充套件搜尋 public stri...

最長回文 馬拉車演算法

總時間限制 10000ms 單個測試點時間限制 1000ms 記憶體限制 5120000kb描述 給出乙個只由小寫英文本元a,b,c.y,z組成的字串s,求s中最長回文串的長度.回文就是正反讀都是一樣的字串,如aba,abba等 輸入乙個檔案一組資料 每組輸入為一行小寫英文本元a,b,c.y,z組成...

最長回文字串 馬拉車演算法

很簡單的例題,就比如hdu3068那個,模版題。首先我們可以考慮暴力,然後可以列舉中心,當你列舉中心的時候,先是1,再是2,如果2不行,那就可以退出了,因為以該點為中心的字串不能繼續拓展了。我們應該開始列舉下乙個中心點了。然後我們考慮優化,馬拉車演算法的核心就是利用了前面計算的資訊,從而高效的得出最...