串的模式匹配 KMP演算法

2021-08-28 23:11:48 字數 967 閱讀 7806

#include#includetypedef struct string cstring;

int kmpfind(cstring parent, cstring child)

int bffind(cstring parent, cstring child)//蠻力匹配

//遇到不相等的就將模式串對比位撥回第一位

} if (j >= child.length)break;

} if (j >= child.length)return 1;

return 0;

}void setnextvalarray(cstring *base)

//i-1是當前正在求子串的主串的下標範圍

}if (j > n)maxequal = n + 2;//當不跳出的經過for迴圈說明存在最大長度n+2的子串

n++;

} base->nextval[i] = maxequal;

} */棄**

j = 0; i = 1;

while (i < base->length)//獲取next陣列的關鍵語句塊

else j = base->nextval[j-1];

} char ch;

for (i = 1; i < base->length; i++)//由next陣列轉為nextval陣列

base->hasgottennext = 1;//更新狀態

return;

}void printnextvalarray(cstring *base)//顯示nextval陣列的內容

printf("\n");

return;

}void printchararray(cstring *base)//顯示串的內容

void assignchararray(cstring *base)

int main()

KMP 模式串匹配演算法

這兩天讀了july的kmp,覺得很受益,寫下以作備忘。kmp最重要的就是求出next陣列,而next陣列則是通過不斷比較 str2 k 與 str2 j 來確定下乙個字元對應的 next數值 相等則直接next j k 不相等則令k next k 進行遞推直到出現 str2 k str2 j 相等的...

串 KMP模式匹配演算法

樸素模式匹配演算法就是簡單的二重迴圈,第一重迴圈主串s從1到n,然後第二重迴圈子串t從1到m進行匹配判斷,時間複雜度為o n m 1 m kmp演算法的核心思想是 第一 如果子串前r個字元均不相等,且子串前r個字元與主串某連續的r個字元匹配,但子串第r 1就不匹配了,則主串的匹配下標可以直接向前跳r...

模式串匹配 KMP演算法

kmp是對字首暴力搜尋的改進,基於的想法其實是很樸素的。首先我們來看一下暴力搜尋。char bf char src,char pattern else if pattern temp 0 return src else return null 如果匹配失敗,則將關鍵字向右滑動乙個字元,從頭開始匹配關...