一般在解决串匹配的问题的时候,一般都是使用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算法了。