manacher演算法及擴充套件

2021-08-11 07:56:18 字數 1282 閱讀 9536

最近學習了一些演算法,總結一下

manacher演算法和擴充套件。

manacher演算法是求乙個字串中,最大回文子串的長度。

#ifndef manacher_h

#define manacher_h

//manacher演算法 :找出字串str中最長的回文子串

#define min(a,b) ab?a:b

#include#include#includeusing namespace std;

//字串改造

//"123abx"

//"#1#2#3#a#b#x#"

string manacherstring(string s)

int manacher(string str)

if (i + r[i] > r)//某一位置的最右回文半徑,超過了邊界

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

}//for迴圈結束;

return max-1;//原字串的最大回文子串長度為擴充套件字串的最大回文半徑-1;

}#endif

nanacher演算法擴充套件

//給定乙個字串str1,只能往str1的後面新增字元變成str2,要求str2

//整體都是回文串且最短。

//1、只要求出包含了str1中最後乙個字元的最長回文子串s即可。

//2、然後將子串s在str1中之前的字元逆序新增到str1末尾即可。

//如「abc12321」,包含「1」的最長回文子串是「12321」,

//將「abc」逆序新增到「abc12321」末尾,變成「abc12321cba」,即為所求的str2。

#ifndef manacher_shortest_end_h

#define manacher_shortest_end_h

#include#include#include#define min(a,b) ab?a:b

using namespace std;

//原字串變成擴充套件字串,長度為奇數

string manacherstring(string s)

int manacher(string str)

if (i + r[i] > r)

if (r == s.length())

}return max-1;

}string shortestend(string str)

return result;

}#endif // !

Manacher演算法及其擴充套件

暴力解最長回文問題 o n 2 o n 2 o n2 manacher演算法o n 回文字串 正著看反著看是一樣的 abccba abcba 存在乙個軸對稱 最長回文字串問題 在乙個字串中找到最長回文字串,而manacher演算法就是去找這個最長回文字串。有啥用?dna序列 回文基因序列有一些生理學...

演算法題 Manacher演算法及其擴充套件

2017 11 21 manacher問題 找出字串str中最長的回文子串 1 在解決最長回文子串問題前,要解決奇回文和偶回文的問題。我們在判斷奇回文時,是根據乙個字串,然後同時向兩邊擴充套件 偶回文則是直接向兩邊擴充套件,中間沒有字串。如下 12a21 奇回文 1221 偶回文 為了解決這個問題,...

詳解manacher演算法,及其擴充套件

懂了演算法,改改 即可ac京東18年校園招聘這題。京和東東是好朋友。東東很喜歡回文。回文是指從前往後讀 和從後往前讀是一樣的詞語。京京準備給東東乙個驚喜,先取定 乙個字串s,然後在後面附上0個或者更多個字母形成回文,京 京希望這個回文越短越好。請幫助京京計算他能夠得到的最短 的回文長度。輸入描述 輸...