最近學習了一些演算法,總結一下
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個或者更多個字母形成回文,京 京希望這個回文越短越好。請幫助京京計算他能夠得到的最短 的回文長度。輸入描述 輸...