網上有詳細講解,我個人覺得kmp比擴充套件kmp要難看的,擴充套件kmp主要用來解決主串的所有字尾與子串t最長的公共字首問題,擴充套件kmp也能找到子串在主串中是否出現,因為如果長度為子串t的長度,那麼肯定就能說明子串t在主串**現過。
借鑑了部落格
corporate identity這道題的做法,順便學習了一下擴充套件kmp,其實這道題暴力也能過的,只不過好麻煩,字串題碼力就是大。
#include
#include
using
namespace std ;
const
int maxn =
1e6+10;
int nt[maxn]
,ex[maxn]
;char s[
5000][
300]
;char ss[maxn]
;void
getnext
(char
* s)}}
intexkmp
(char
*s,char
*t)if
(ex[i]
==n2)
return1;
}return0;
}void
quchar
(char
*s,char
*ss,
int l,
int r)
intmain()
}int mx =
0,l,r;
int len =
strlen
(s[pos]);
for(
int i=
0;iif(
!f)else
if(j-i+
1==mx)}}
}}}}
if(mx==0)
printf
("identity lost\n");
else
}}
KMP 擴充套件KMP
本文將不斷加入例題,稍安勿躁,今天的總結爭取9 30寫完.kmp,中文名字叫字串匹配,用於解決一類字串匹配問題.先下一些定義 首先我們先想一想 nxt i 對於求解問題有怎樣的幫助.我們對於每乙個 t i s 1 的位置都匹配一次,這樣子複雜度為 theta n m 的.考慮在暴力匹配中其實我們不一...
擴充套件kmp
出自 2 i k l 1 p k,即i l p。這時,首先可以知道a i.p 和b 0.p i 是相等的 因為a i.p b i k.p k 而i k l 1 p k,由b 0.l 1 b i k.i k l 1 可得b 0.p i b i k.p k 即a i.p b 0.p i 然後,對於a p...
擴充套件KMP
拖了這麼久,終於打出擴充套件kmp了。並不長,但是細節很多。最好把模板背下來,實在背不下來就根據原理去推。相比於kmp來說擴充套件kmp的應用範圍更廣,更靈活。它的ext i 與kmp的next i 的區別就是next i 表示長度最大的一段s i next i 1 i t 1 next i ext...