在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陣列裡,最後一位是不包括最後乙個數,前面的字串的最長相同前字尾長度,如果要求所有的,就需要遍歷到最後一位+1的位置,遍歷到這裡其實是整個p字串最長相同前字尾長度。題目與**如下
p3375 【模板】kmp字串匹配傳送門
#include
#include
#include
using
namespace std;
int next[
1000100];
void
find_next
(string p)
else
k=next[k];}
return;}
void
kmp(string s,string p)
}else
j=next[j];}
return;}
intmain()
/*abababab
abab
*/
void
find_next
(string p)
else
k=next[k];}
return
;}
複習 KMP演算法
對於kmp演算法的學習,在寒假時我還是搞不太明白,但幾個月之後,對於它的理解又更近了一步。首先是對於子串的自我匹配,求乙個fail陣列,fail i 對於字串ss的前ii個字元構成的子串,既是它的字尾又是它的字首的字串中 包括他 最長的長度記作fail i 舉個例子,abcdabc中fail 7 的...
KMP匹配演算法複習。。
kmp演算法 knuth morris pratt algorithm knuth就是高德納。kmp演算法是從樸素匹配演算法改進而來 就是窮搜匹配。樸素匹配演算法 原串 abcde 模式串 acd 1.將原串和模式串左對齊,然後一位一位比較,直到有乙個字元不匹配 2.發現第二位的b和c不匹配,模式串...
KMP演算法(複習自用)
一直以來學習都有點浮躁,抓著半截就跑,今天學習kmp演算法時,連示例 都沒有讀一遍就開始手擼 根本沒有理解完整正文的意思。最後不僅求next寫錯了,kmp匹配也寫錯了,於是反反覆覆回去看教程,兩三個小時才寫出來。kmp演算法,不管是主演算法還是預處理的next求取,在學習中要深刻把握住兩個不同的下標...