資料結構 字串 模式匹配

2021-09-28 21:51:53 字數 1430 閱讀 2877

}我們先把模式串標出序號:

接著把模式串所有字首依次列出來

接下來把每乙個子串相等的字首和字尾的最大長度求出,舉個例子」abaab「

觀察子串,前字尾ab相同,因此返回2

5.依次類推,我們可以得到每乙個子串對應的一組序列

當時這組資料並不是所要求的next陣列,可以將其稱為部分匹配值表,相應c**如下

//獲得部分匹配值表

void

getindexstr

(sqstring* s,

int next )

}

接著我們可以得到 首字為 -1 版本的next陣列

//獲得next陣列 :相當於部分匹配值表右移1位,前插 - 1

void

getnextarr

(sqstring* s,

int next)

}

要想得到嚴蔚敏版本的,即將上述序列全部元素+1即可,**如下:

void

getnextarradd1

(sqstring* s,

int next)

}

int

kmpstr

(sqstring* s, sqstring* t)

else j = next[j];}

if(j >= t->length)

return

(i - t->length)

;else

return-1

;}

void

getnextvalarr

(sqstring* s,

int nextval)

else

j = nextval[j];}

}

資料結構 字串的模式匹配

什麼叫做模式匹配呢?其實就是看字串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 這一次比較匹配不上。...

資料結構 字串匹配

演算法 如下,包括暴力匹配和kmp演算法。參考 include stringmatching.h stringmatching stringmatching void stringmatching stringmatching void 返回子串t在主串s中第pos個字串之後的位置。若不存在,則返回...

資料結構之字串的模式匹配

字串的模式匹配問題 一共有兩種演算法,1.樸素模式匹配演算法。舉例而言 尋找從s goodgoogle 中找到v google 這個子串 我們一般需要以下的步驟 1 從主串的第乙個字元開始,s與 v中的字元逐一比較,可以發現前三個匹配成功而第四個沒有匹配成功 豎線代表成功,折現代表失敗 2 主串的開...