資料結構2 2串的模式匹配

2021-09-09 05:17:02 字數 1048 閱讀 1041

子串在主串中的定位操作稱為串的模式匹配,記為index(s,t,pos),即在主串s中,從第pos個字元開始查詢與子串t第一次相等的位置。若查詢成功,則返回子串t的第乙個字元在主串中的位序,否則返回0。其中主串稱為目標串,子串稱為模式串

基本思想

從目標串的第pos個字元開始與模式串的第乙個字元比較,若相等則繼續逐個比較後續字元,否則從主串的第pos+1個字元重新和模式串進行比較。以此類推,若存在和模式串相等的子串,則匹配成功返回模式串t的第乙個字元在目標串s中的位置;否則,匹配失敗返回0。

brute-force演算法如下

int

index

(string *s,string *t,

int pos)

//引數非法

i = pos -1;

i =0

;while

(i < s->length && j < t->length)

else}if

(j >= t->length)

else

}

該演算法較簡單且易於理解,但效率不高,因為目標串指標(i)的回溯消耗了大量時間。

討論一般情況,設目標串s=「s0 s1 … sn-1」,模式串"t0 t1 … tm-1",當si != tj 時存在

"t0 t1 … tk-1" = 「tj-k tj-k+1 … tj-1」(0next[j]的實現(修正後)

void

getnext

(string *t,

int next)

else

else

}

kmp演算法實現
int

kmpindex

(string *s,string *t,

int pos)

else}if

(j >= t->length)

else

}

資料結構 字串 模式匹配

我們先把模式串標出序號 接著把模式串所有字首依次列出來 接下來把每乙個子串相等的字首和字尾的最大長度求出,舉個例子 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 這一次比較匹配不上。...

資料結構 串的模式匹配 BF演算法

目錄串 定義串的建立 串的比較 模式匹配 bf演算法 概述 bf 效能 串 或字串 是由零個或多個字元組成的有限序列。define maxsize 100 typedef struct sqstring int strassign sqstring s,char cstr return s.leng...