學習兩種字串匹配演算法BF演算法和RK演算法

2021-10-05 19:33:29 字數 1130 閱讀 2766

問題

給你兩個字串a和b,請你判斷b是否是a的子串,並且返回b在a中第一次出現的位置。

示例1:

a:abcdefg

b:cde

return 2;

示例2:

a:abcdefg

b:acg

return -1;

更優方案:rk演算法(由演算法兩位發明者rabin和karp的名字命名的)

bf演算法只是簡單粗暴對兩個字串中的所有字串依次比較,rk演算法比較兩個字串的hash值。rk演算法的核心思想類似於hash函式。對於hash函式有了解的同學應該知道,我們通過hash函式可以將乙個字串對映成乙個數字(hash值)。當兩個字串的hash值不相同時,說明這兩個字串一定不匹配,而相同時則說明兩個字串是有可能匹配的,那麼就需要進一步驗證。

**如下

public

static

intrabinkarp

(string str, string pattern)

// 如果不是最後一輪,更新主串從i到i+n的hash值

if(i < m - n)

}return-1

;}private

static

inthash

(string str)

return hashcode;

}private

static

intnexthash

(string str,

int hash,

int index,

int n)

private

static

boolean

comparestring

(int i, string str, string pattern)

public

static

void

main

(string[

] args)

缺點:當雜湊衝突過多,rk演算法需要逐個比較,rk演算法就退化成了bf演算法。

更優的演算法如kmp,sunday等演算法,自行了解。

字串匹配演算法 BF

brute force演算法,簡稱bf演算法,是一種簡單樸素的模式匹配演算法,常用語在乙個主串string內查詢乙個子串 pattern的出現位置。核心思想 i遍歷主串string i 每自增一次,內層迴圈用j遍歷子串pattern,同時判斷patter j string i j 若條件成立,j 自...

字串模式匹配演算法 BF演算法

include include intbf char str1,char str2,int length1,int length2,int pos int main 字串模式匹配演算法 str1為主串,str2為子串 length1為主串長度,length2為子串長度,intbf char str1...

經典演算法 BF演算法(字串匹配)

字串的匹配演算法也是很經典的乙個演算法,在面試的時候常常會遇到,而bf演算法是字串模式匹配中的乙個簡單的演算法 bf演算法,即暴力 brute force 演算法,是普通的模式匹配演算法,思想簡單,結構也簡單 bf演算法的思想就是將目標串s的第乙個字元與模式串t的第乙個字元進行匹配,若相等,則繼續比...