藍橋複習 KMP

2021-10-24 20:56:56 字數 1012 閱讀 4010

在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求取,在學習中要深刻把握住兩個不同的下標...