BF 算法中的 BF 是 Brute Force 的缩写,中文叫作暴力匹配算法,也叫朴素匹配算法。
    BF 算法的思想:在主串中,检查起始位置分别是 0、1、2….n-m 且长度为 m 的 n-m+1 个子串,看有没有跟模式串匹配的。

    比如主串:baddef,模式串:abc
    image.png

    BF 算法的思想就是将文本串 s 的第一个字符与模式串 p 的第一个字符进行匹配:

    • 若相等,则继续比较 s 的第二个字符和 p 的第二个字符
    • 若不相等,则比较 s 的第二个字符和 p 的第一个字符

    依次比较下去,直到得出最后的匹配的结果

    image.png

    1. public static int bfMatch(String str, String sub, int pos) {
    2. if (pos < 0 || pos > str.length()) {
    3. return -1;
    4. }
    5. int baseIndex = pos;
    6. int index = 0;
    7. while(baseIndex < str.length() && index < sub.length()) {
    8. if (str.charAt(baseIndex) == sub.charAt(index)) {
    9. // 字符匹配
    10. baseIndex++;
    11. index++;
    12. } else {
    13. // 主串回退从新开始匹配
    14. baseIndex = baseIndex - index + 1;
    15. index = 0;
    16. }
    17. }
    18. if (index >= sub.length()) {
    19. // 子串匹配结束,计算匹配的起始位置
    20. return baseIndex - index;
    21. }
    22. return -1;
    23. }