BF 算法中的 BF 是 Brute Force 的缩写,中文叫作暴力匹配算法,也叫朴素匹配算法。
BF 算法的思想:在主串中,检查起始位置分别是 0、1、2….n-m 且长度为 m 的 n-m+1 个子串,看有没有跟模式串匹配的。
比如主串:baddef,模式串:abc
BF 算法的思想就是将文本串 s 的第一个字符与模式串 p 的第一个字符进行匹配:
- 若相等,则继续比较 s 的第二个字符和 p 的第二个字符
- 若不相等,则比较 s 的第二个字符和 p 的第一个字符
依次比较下去,直到得出最后的匹配的结果
public static int bfMatch(String str, String sub, int pos) {
if (pos < 0 || pos > str.length()) {
return -1;
}
int baseIndex = pos;
int index = 0;
while(baseIndex < str.length() && index < sub.length()) {
if (str.charAt(baseIndex) == sub.charAt(index)) {
// 字符匹配
baseIndex++;
index++;
} else {
// 主串回退从新开始匹配
baseIndex = baseIndex - index + 1;
index = 0;
}
}
if (index >= sub.length()) {
// 子串匹配结束,计算匹配的起始位置
return baseIndex - index;
}
return -1;
}