目录
BF算法的介绍
BF算法,即暴力(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。
如果可以在S中寻找到T,我们返回的是相匹配字符串中第一个字符在S串里的下标索引值;如果找不到,我们通常设置为返回-1。
图解
我们用i来遍历S, j来遍历T
则实现过程如下:
(1)i=0,j=0
aabcda
da
匹配失败,则 j 赋值 0 ,i 赋值 i - j + 1 = 1
(2)i=1,j=0
aabcda
da
匹配失败,则 j 赋值 0 ,i 赋值 i - j + 1 = 2
(3)i=2,j=0和i=3,j=0同理 匹配失败
(4)i=4,j=0
aabcda
da
匹配成功,则 i++,j++
(5)i=5,j=1
aabcda
da
匹配成功,返回的是相匹配字符串中第一个字符在S串里的下标索引值,4
JAVA语言实现
java
public class BF {
public static int bf(String str,String sub){
if(str==null||sub==null){
return -1;
}
int strlen=str.length();
int sublen=sub.length();
if(strlen==0||sublen==0){
return -1;
}
int i=0,j=0;
while (i<strlen&&j<sublen){
if(str.charAt(i)==sub.charAt(j)){
i++;
j++;
}else {
i=i-j+1;
j=0;
}
}
if(j>=sublen){
return i-j;
}
return -1;
}
}
测试:
java
public static void main(String[] args) {
System.out.println(bf("aabcda","da"));
}
结果:4
BF算法的时间复杂度
(1)最理想的情况下 该算法的时间复杂度为O(n) 其中n为T串的长度,即一次遍历就在S中找到了T
(2)最坏的情况下 该算法的时间复杂度为O(n*m) 其中 m 和 n
分别为 S 和 T 的长度,即前面每次匹配都不成功,直至到 S 的最后一个字符才与之匹配。
以上为我个人的小分享,如有问题,欢迎讨论!!!
都看到这了,不如关注一下,给个免费的赞