對於kmp演算法的學習,在寒假時我還是搞不太明白,但幾個月之後,對於它的理解又更近了一步。
首先是對於子串的自我匹配,求乙個fail陣列,fail[i]對於字串ss的前ii個字元構成的子串,既是它的字尾又是它的字首的字串中(包括他),最長的長度記作fail[i]
。舉個例子,abcdabc中fail[7]的值就是3。當我們失配的時候,就直接跳到fail[i]所指的值上,這樣效率就提公升很大。
**
#includeusingnamespace
std;
const
int maxn=1e7+7
;int
fail[maxn],show[maxn];
char
s1[maxn],s2[maxn];
intans;
intlen1,len2;
intj;
void
getfail()
} void
kmp()
}}int
main()
for(int i=1;i<=len2;i++)
return0;
}
KMP匹配演算法複習。。
kmp演算法 knuth morris pratt algorithm knuth就是高德納。kmp演算法是從樸素匹配演算法改進而來 就是窮搜匹配。樸素匹配演算法 原串 abcde 模式串 acd 1.將原串和模式串左對齊,然後一位一位比較,直到有乙個字元不匹配 2.發現第二位的b和c不匹配,模式串...
KMP演算法(複習自用)
一直以來學習都有點浮躁,抓著半截就跑,今天學習kmp演算法時,連示例 都沒有讀一遍就開始手擼 根本沒有理解完整正文的意思。最後不僅求next寫錯了,kmp匹配也寫錯了,於是反反覆覆回去看教程,兩三個小時才寫出來。kmp演算法,不管是主演算法還是預處理的next求取,在學習中要深刻把握住兩個不同的下標...
藍橋複習 KMP
在s中尋找p 找到第一次出現的位置 void find next char p else k next k return intkmp char s,char p else j next j if j hp return i j else return 1 在next陣列裡,最後一位是不包括最後乙個...