問題:
給你兩個字串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的第乙個字元進行匹配,若相等,則繼續比...