子串的定位運算通常稱為串的模式匹配
或串匹配。
串的模式匹配設有兩個字串s和t,設s為主串,也稱著名的模式匹配演算法有bf演算法和kmp演算法,下面介紹bf演算法。正文串
;設t為子串,也稱模式
。在主串s中查詢與模式t相匹配的子串,如果匹配成功,確定相匹配的子串中的第乙個字元在主串s**現的位置。
模式匹配不一定是從主串的第乙個位置開始,可以指定主串中查詢的起始位置pos。【演算法步驟】①分別利用計數指標 i 和 j 指示主串 s 和模式 t 中當前正待比較的字元位置,i 初值為
pos
, j 初值為1
。②如果兩個串均未比較到串尾,即 i 和 j 分別小於等於 s 和 t 的長度時,則迴圈執行以下操作:
③如果
j >t.length
,說明模式 t 中的每個字元依次和主串 s 的乙個連續的字串行相等,則匹配成功,返回和模式 t 中第乙個字元相等的字元在主串 s 中的序號(i-t.length);否則稱匹配不成功,返回0。【演算法描述】
【演算法分析】①最好情況下int
index_bf
(sstring s,sstring t,
int pos)
//繼續比較後續字元
else
//指標後退重新開始比較}if
(j>t.length)
return i-t.length;
//匹配成功
else
return0;
//匹配失敗
}
o(n+m)
,每趟不成功的匹配都發生在模式串的第乙個字元與主串中相應字元的比較,例如:s=「aaaaaba」
t=「ba」
②最壞情況下
o(n×m)
,每趟不成功的匹配都發生在模式串的最後乙個字元與主串中相應字元的比較,例如:s=「aaaaaab」
t=「aab」
**實現:
這個是關於kmp演算法的講解kmp演算法—串的模式匹配演算法#include
#include
int lens,lent;
intindex_bf
(char s,
char t,
int pos)
//繼續比較後續字元
else
//指標後退重新開始比較}if
(j>lent)
return i-lent;
//匹配成功
else
return0;
//匹配失敗
}int
main()
for(i=lent;i>
0;i--
)//將子串所有元素全部後移
x=index_bf
(s,t,1)
;printf
("%d"
,x);
//return 0;
}
借鑑:《資料結構》 嚴蔚敏
BF演算法 串的模式匹配
bf演算法,即暴風 brute force 演算法,是普通的模式匹配演算法,bf演算法的思想就是將目標串s的第乙個字元與模式串t的第乙個字元進行匹配,若相等,則繼續比較s的第二個字元和 t的第二個字元 若不相等,則比較s的第二個字元和t的第乙個字元,依次比較下去,直到得出最後的匹配結果。bf演算法是...
串的模式匹配演算法 BF演算法詳解
二 時間複雜度 三 c 實現 bf演算法是一種蠻力演算法,其實現過程沒有任何技巧,就是簡單粗暴地拿乙個串同另乙個串中的字元一一比對,得到最終結果。演算法目的 確定主串中所含子串第一次出現的位置,這裡的子串也稱為模式串。1 主串和模式串逐個字元進行比較 2 當出現字元不匹配 失配 時,主串的比較位置重...
串的模式匹配演算法之BF演算法
演算法的基本思想是 從主串s的第pos個字元起和模式的第乙個字元比較,若相等,則繼續逐個比較後續字元 否則從主串的下乙個字元起再重新和模式的字元比較。依次類推,直至模式t中的每個字元依次和主串s中的乙個連續的字串行相等,則稱匹配成功,函式值為和模式t中的每個字元依次和主串s中的序號,否則稱匹配不成功...