資料結構 串的模式匹配演算法 C語言

2021-10-04 02:42:42 字數 1563 閱讀 8137

1:思路:從主串s=「s0s1s2s3…sn-1」的第乙個字元開始與子串t="t0t1t2…tm-1"的第個字元進行比較, 若相等,則繼續比較後續字元; 否則從主串s的第-個字元開始重新與子串t的第乙個字元進行比較,若相等,則繼續比較後續字元;否則從主串s的第三個字元開始重新與子串t的第乙個字元進行比較;如此不斷進行比較,若存在子串t中的每個字元依次和主串s中的乙個連續字串行相等,則匹配成功,函式返回子串1的第乙個字元在主串、中的下標,若比較完主串s的所有字串行後,不存在一乙個 和模式串t相等的子串,則匹配失敗,函式返回-1。

2:一般形式:

3:**實現

int

bfindex

(dstring s,

int start, dstring t)

//brute-force演算法

else}if

(j == t.length)

else

return v;

}

總結:這種方法太消耗時間了。

思路:這個演算法分兩步,①先算next陣列②再用kmp演算法。

一:模式串的next:next[0]=-1;(這個是不可能出現的情況)

next[1]=0;(在1前面的數中的最大真子串)

因為t0!=t1,next[2]=0;

因為t0!=t2,next[3]=0;

因為t0=t3=『a』,next[4]=1;

因為t1=t4=『b』,既有t0t1=t3t4=』『ab』』,next[5]=next[4]+1=2;

因為t2=t5=『c』,既有t0t1t2=t3t4t5=』『abc』』,next[6]=next[5]+1=3;

因為t3=t6=『a』,既有t0t1t2t3=t3t4t5t6=』『abca』』,next[7]=next[4]+1=4;

因為t4!=t7,k=next[k]=next[4]=1;有因為t1!=t7,k=next[k]=next[1]=0;再因為t0=t7=『a』,next[8]=next[1]+1=1

//模式串頭

else

}}二:kmp演算法(在bf演算法的基礎上進行了小小的改進)

int

kmpindex

(dstring s,

int start, dstring t,

int next)

else

if(j ==0)

else}if

(j == t.length)

else

return v;

}

C語言資料結構 9 串的樸素模式匹配演算法

查詢字串子串的位置的操作,稱為串的模式匹配,子串被稱為模式串。串的模式匹配是非常高頻的操作,具體如何去匹配的演算法也很重要。樸素模式匹配演算法也稱為布魯特 福斯演算法,感覺很是高大上,但是實現起來很簡單。樸素的意思就是最符合咱們樸素思維的演算法,從主串的第乙個字元開始與子串進行比對,如果相等則逐一比...

C語言資料結構中串的模式匹配

c語言資料結構中串的模式匹配 串的模式匹配問題 樸素演算法與kmp演算法 include include int index char s,char t,int pos else if j t 0 return i t 0 else return 0 int get next char t,int ...

C語言資料結構字串的模式匹配 BF演算法

串的模式匹配 bf演算法 找到相同的字串輸出在原字串中的位置 代表匹配字串在原字串中的位置 include include include define strsize 255 字串的最大長度 typedef char strtype 字元數字型別 typedef int statu 函式返回值的資...