BF(暴风)算法
1、原理
BF算法,朴素匹配算法。这一种字符串匹配方式比较暴力,但是相对来说比较的简单、易懂,但对的性能不高。
2、补充
- Java中常用的字符串方法,indexOf(),startWith(),endWith()。BF,RK,BM,KMP算法。
3、算法思路
- 在主串钟,检查起始位置分别是 0、1、2 …… n-m 且长度为m的n-m+1个子串,检查有没有跟模式串想匹配的。
4、Java实现
/**
* BF算法 暴风算法,一种暴力算法
* @author tyeerth
* @date 2020/8/11 - 11:09
*/
public class BruteForce {
/**
* 使用BF算法在主串钟匹配子串
* @param t 主串
* @param p 子串
* @return
*/
public static int BF(String t , String p){
if(t.length() == 0 || t == null || p.length() == 0 || p == null){
return -1;
}
//把字符串转换成字符数组
char[] t_array = t.toCharArray();
char[] p_array = p.toCharArray();
return match(t_array,p_array);
}
//匹配方法
private static int match(char[] t , char[] p){
int i = 0;
int j = 0;
int posi = 0;
while (i < t.length && j < p.length){
if (t[i] == p[j]){
i++;
j++;
}else {
//若p子串中第j(j > 0)个字母不匹配,则 i 不进行移动
i = i - j + 1;
j = 0;
}
}
//如果 i 未超出范围,就说明是j超出范围,表示查找成功
if(i < t.length){
//返回匹配到的第一个位置
posi = i - p.length;
}else {
posi = -1;
}
return posi;
}
public static void main(String[] args) {
String t = "abcd";
String p = "c";
System.out.println(BF(t, p));
}
}
- 运行结果