演算法 KMP 字元匹配

2021-09-01 09:20:11 字數 976 閱讀 1284

主要參考:

理解kmp 的9張ppt:

假設模式串為p,原串為s

1 樸素方法

最壞時間複雜度:o(p.length*s.length)

2 kmp

時間複雜度:o(p.length+s.length)

kmp演算法步驟:

1.構造next陣列

2.將模式串和原串進行匹配

3 kmp相關練習

3道都是模板題,大差不差,主要在於鞏固,加深記憶。

演算法練習1 #1015 : kmp演算法

#include #include using namespace std;

#define maxn 10005

int next1[maxn];

//得到next1陣列 next1[j]表示字元子串(0~j)中字首字尾相等的最長字元個數(-1表示0個字元相等,0表示有1個字元相等,以此類推)

void getnext(string s1)

if(s1[j] == s1[t + 1])

else}/*

cout

string s1, s2;

while(t--)

if(s2[t + 1] == s2[j])

else

}int i=0, j=0;

while(i < len1)

if(p[t + 1] == p[j])

else

}}int kmp(string p, string s)

} else

else

}} return cnt;

}int main()

return 0;

}

字元匹配kmp演算法

前言 之前對kmp演算法雖然了解它的原理,即求出p0 pi的最大相同前字尾長度k 但是問題在於如何求出這個最大前字尾長度呢?我覺得網上很多帖子都說的不是很清楚,總感覺沒有把那層紙戳破,後來翻看演算法導論,32章 字串匹配雖然講到 了對前1.kmp演算法的原理 本部分內容 字串匹配是計算機的基本任務之...

字元匹配 KMP演算法

problem description 給定兩個字串string1和string2,判斷string2是否為string1的子串。input 輸入包含多組資料,每組測試資料報含兩行,第一行代表string1 長度小於1000000 第二行代表string2 長度小於1000000 string1和s...

KMP字元匹配演算法原理

掘金位址鏈結 簡介 kmp演算法是一種改進的字元匹配演算法。由d.e.knuth,j.h.morris和v.r.pratt提出的,因此人們稱它為克努特 莫里斯 普拉特操作 簡稱kmp演算法 它的核心思想是,通過乙個next陣列,在匹配失敗後,減少字元移動的距離,達到快速匹配的目的。要想徹底理解kmp...