A ABB 馬拉車演算法

2022-06-02 03:42:07 字數 653 閱讀 1209

題意:給出乙個字串,讓我們通過從右邊+字元的方式來讓這個字串成為回文串  

問最少用多少字元能使其成為回文串

思路:利用馬拉車演算法,在每個字元間補『#』(防止考慮不到abba這種回文型別)

然後跑一遍求出len值

在列舉每個位置為中心點的情況,列舉出最優值即可

1 #include 2

using

namespace

std;

3const

int inf = 0x3f3f3f3f;4

const

int maxx = 3e6+10;5

char

tmp[maxx];

6int

len[maxx];

7int ans=inf;

8void manacher(strings)9

18 tmp[2*t+2]='\0'

;19int mx=0;20

intmid;

21for(int i=1;tmp[i];i++)

29int l=len[i]-1;30

if(i%2==0)36

}37else43}

44}45}

46int

main()

47

馬拉車演算法

思路筆記 上述情況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 題意在給定的字串中找...