C語言KMP字串匹配演算法

2021-07-15 05:22:20 字數 548 閱讀 5695

其思想就是通過乙個next陣列對短串進行處理,找到短串前後某兩個位置是否具有相同的前字尾,用next[i]表示最後以b[i]結尾的字首和字尾與模式串字首的最長匹配數。

這樣兩字串在匹配是,若在長串與短串某位置發現兩字元不同,不能繼續匹配時,短串下標i不一定要回到短串的首字元繼續匹配,短串可以跳到next[i]的位置。從而降低演算法的時間複雜度,從原來的o(n*m)降低到o(n+m)。//n,m表示兩串長度

**如下:

#include#includeconst int max=10010;

char str[max],str1[max];//這裡匹配的的浪字串,kmp演算法也可用於兩個陣列等。

int nextt[max];

void next(int len)

{ int i=-1,j=0;//將i初始化為-1,是為了維護兩個指標i,j,便於對next陣列進行初始化,保證i在j前

nextt[0]=-1; //將短串首字元的next值賦值為-1,便於後面kmp()函式迴圈中i跳到到短串首時做特殊處理

while(j



c語言 字串匹配的KMP演算法

舉例 有乙個字串 bbc abcdab abcdabcdabde 裡面是否包含另乙個字串 abcdabd 許多演算法可以完成這個任務,knuth morris pratt演算法 簡稱kmp 是最常用的之一。它以三個發明者命名,起頭的那個k就是著名科學家donald knuth。這種演算法不太容易理解...

KMP演算法 字串匹配

kmp演算法基本思想 我們在用常規的思想做 字串匹配時候是 如 對如 字元如果 t abab 用p ba 去匹配,常規思路是 看 t 第乙個元素 a 是否 和p 的乙個 b 匹配 匹配的話 檢視各自的第二個元素,不匹配 則將 t 串的 第二個元素開始 和 p 的第乙個匹配,如此 一步一步 的後移 來...

KMP字串匹配演算法

kmp核心思想 計算模式串的next陣列,主串的索引在比較的過程中不回朔 ifndef kmp h define kmp h class kmp endif include kmp.h include include include using namespace std int kmp calcu...