給定兩個字串s和t(長度分別為n和m),下標從0開始,定義extend[i]等於s[i]...s[n-1]與t的最長公共字首的長度,求出所有的extend[i]
next[i]:t[i]...t[m-1]與t的最長公共字首長度;
extend[i]:s[i]...s[n-1]與t的最長公共字首的長度。
1//c/c++ 模板
2 #include 3 #include 4 #include
5using
namespace
std;
6const
int n = 101010;7
intnext[n],extand[n];
8void getnext(char *t)
21else next[k] =l;
22} 23}
24void getextand(char *s,char *t)
38else extand[k] =l; 39}
40}4142
intmain() 51}
5253
/*54
abababab abab
55aaaabaaa aaaa
56*/
只有不斷學習才能進步!
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...