}我們先把模式串標出序號:
接著把模式串所有字首依次列出來
接下來把每乙個子串相等的字首和字尾的最大長度求出,舉個例子」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 主串的開...