一般在解决串匹配的问题的时候,一般都是使用BF算法、KMP算法和BM算法。今天就来讲讲什么是BF算法。

BF算法:

基本思想:

1.从主串S的第一个字符开始和模式T的第一个字符进行比较;
2.若相等,则继续比较两者的后续字符;
3.若不相等,则从主串S的第二个字符开始和模式T的第一个字符进行比较;
4.重复上述过程,若T中的字符全部比较完毕,则说明本趟匹配成功;
5.若最后一轮匹配的起始位置是n-m+2,则主串S中剩下的字符不足够匹配整个模式T,匹配失败(n:主串长度,m:子串长度)

定义:

BF(Brute-Force)算法,是我们常用的做传匹配的算法,即在一个主串s里面查找一个子串s在t里的位置。这个算法称为朴素的模式匹配算法,简称BF算法。

例子:

主串s="ababcabcacbab"
子串t="abcac"

第一趟 ababcabcacbab
            abcac

第二趟 abbabcabcacbab
             abcac

第三趟 ababcabcacbab
                abcac

第四趟 ababcabcacbab
                  abcac

第五趟 ababcabcacbab
                    abcac

第六趟 ababcabcacabcacbab
                     abcac

算法如下:

    public static int bruteforce(String s,String t){
        int s1 = s.length();//目标字符串的长度
        int s2 = t.length();//模式串的长度

        for(int i=0;i<s1-s2;i++){
            int j=0;
            while((j < s2) && (s.charAt(i+j) == t.charAt(j))){
                j++;
            }
            if(j == s2){
                return i;
            }
        }

        return -1;
    }

总结:
这是一个比较简单的蛮力法,但是由例子可以看出来有很多步骤我们是可以跳过的。这就引申到了优化的问题~也就是KMP或者是BM算法了。