資料結構 字串匹配

2021-07-03 12:09:52 字數 946 閱讀 7421

演算法**如下,包括暴力匹配和kmp演算法。

參考 

#include "stringmatching.h"

stringmatching::stringmatching(void)

stringmatching::~stringmatching(void)

/*返回子串t在主串s中第pos個字串之後的位置。若不存在,則返回0*/

int stringmatching::******stringmatch(char* s ,char* t,int pos)

else

}if (j == tlen)

return i - j;

else

return -1;

}//kmp模式匹配演算法

/*通過計算返回子串t的next陣列*/

void stringmatching::get_next(char* t,int *next)

else

}}//改良後的kmp演算法,只改進next陣列的推導

/*通過計算返回子串t的next陣列*/

void stringmatching::get_nextval(char* t,int *nextval)

else

}}//flag不為0是改善後的kmp

int stringmatching::kmp(char* s,char* t ,int pos,int flag)

else

while (i < slen && j < tlen)

else

}if (j == tlen)

return i - j;

else

return 0;

}

測試**如下

void test_stringmatch()

資料結構 字串匹配KMP

kmp主要用於字串匹配 關鍵在於next陣列的求解,當匹配不成功的時候模式串的回退位置就由next陣列決定。next陣列只與主串有關,其求解過程就運用到了kmp思想,求解過程網上很多,個人覺得比較難以理解。next陣列應用,下標從1開始 字首與字尾的最大匹配長度,next i 為字首與字尾的最長匹配...

資料結構 字串 模式匹配

我們先把模式串標出序號 接著把模式串所有字首依次列出來 接下來把每乙個子串相等的字首和字尾的最大長度求出,舉個例子 abaab 觀察子串,前字尾ab相同,因此返回2 5.依次類推,我們可以得到每乙個子串對應的一組序列 當時這組資料並不是所要求的next陣列,可以將其稱為部分匹配值表,相應c 如下 獲...

資料結構 字串的模式匹配

什麼叫做模式匹配呢?其實就是看字串s中是否有子串t,那麼t就叫匹配串。我們平時查詢方式是逐個匹配,那麼時間複雜度就是o n m 比如s abcabde t abd 那麼比較的時候s 1 t 1 所以接下來比較s 2 和t 2 結果s 2 t 2 那麼接下來就比較s 3 和t 3 這一次比較匹配不上。...