題意是在乙個字串中找出乙個字首乙個字尾和乙個中間的子串,互相不重疊並且三部分完全一樣
運用的是exkmp
對自身求乙個next陣列
next[i]表示以i為開始位置的子串與整個串的字首最長匹配到多少長度
然後就是列舉了
注意到我們列舉後三分一的位置時,如果某個位置為i,
且next[i]+ i == len。
也就是子串的長度為next[i]了
// created by chenhongwei in 2015.
#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;
const int inf=1e9;
const int maxn=1e6+100;
typedef long long ll;
typedef unsigned long long ull;
char t[maxn];
int nxt[maxn];
void pre_exkmp(char *t)
{ int n=strlen(t);
nxt[0]=n;
int j=0;
while(j+1
HDU 4763 擴充套件KMP
題目鏈結 題意 給定字串s,求格式為abaca的字串分割 a,b,c皆為s的子串 a的最長長度。思路 abaca格式 說明分割方法要使得字首同字尾相同並能在前字尾部分外找到與前字尾相同的子串。以s為母串s為子串進行擴充套件kmp處理後,如果能找到某點的ex i i len說明我們找到了乙個相同的前字...
hdu 4763 擴充套件的KMP
一開始沒有看清楚串的長度,一百萬啊,我就用字尾陣列做,結果肯定t了,一看是一百萬的數量級,就想到了擴充套件的kmp。n為串的長度,那麼結果k的最大值不會超過n 3 我們首先算出next n 3 next n n 3 n 3 區間內的最大值max,然後列舉k的長度,每次k減一的時候只需更新max就可以...
HDU 4763 找出特殊規律的串
在乙個text串中找出pattern串e以滿足eaebe,a b可以是任意串 看一眼覺得woc好難,後來看一下樣例ab為空也可以 找觀察一下e既是字首也是字尾,很容易聯想到next 最優情況eee,那就是3 next j j a,b任取,那只要進一步保證 3 next j j 即可 聽說有dalao...