HDU 4763 擴充套件KMP

2021-08-21 09:17:36 字數 572 閱讀 4222

題目鏈結

題意:給定字串s,求格式為abaca的字串分割(a,b,c皆為s的子串)a的最長長度。

思路:abaca格式:說明分割方法要使得字首同字尾相同並能在前字尾部分外找到與前字尾相同的子串。

以s為母串s為子串進行擴充套件kmp處理後,如果能找到某點的ex[i]+i==len說明我們找到了乙個相同的前字尾。

注意ex[i]的意義:s[i,...,n-1]同s的最長公共字首。所以當我們找到乙個ex[i]+i==len時,只需在[ex[i],len-ex[i]-1]區間內再找到乙個ex[j]>=ex[i]就可以說明除字首和字尾外的部分還存在乙個子串同前字尾相同。

c++**:

#includeusing namespace std;

const int maxn = 1000010;

void getnext( char *s , int *next )

int query( int l , int r , int l , int r , int rt )

int main()

return 0;

}

hdu4763 擴充套件kmp

題意是在乙個字串中找出乙個字首乙個字尾和乙個中間的子串,互相不重疊並且三部分完全一樣 運用的是exkmp 對自身求乙個next陣列 next i 表示以i為開始位置的子串與整個串的字首最長匹配到多少長度 然後就是列舉了 注意到我們列舉後三分一的位置時,如果某個位置為i,且next 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...