简介
BF算法,即暴风(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。———百度百科
BF算法就如同算法中的暴力破解法,虽然可以解决问题,但是效率不高,字符串匹配算法还有一种算法叫KMP在稍后再讨论,此文主要讨论BF
代码
/**
* BF字符串匹配算法
* @param str 主串
* @param sub 子串
* @param pos 主串开始匹配的位置
* @return
*/
public static int BF(String str,String sub,int pos)
{ //判断合法性
if(pos<0||pos>str.length()||str.length()<sub.length())
{
return -1;
}
//i为主串中的指引下标
int i = pos;
//j为子串中的指引下标
int j = 0;
//循环直到子串或者主串匹配完毕
while(i<str.length()&&j<sub.length())
{ //如果当前位置字符相等,i和j同时向后移动继续比较
if(str.charAt(i)==sub.charAt(j))
{
i++;
j++;
}
//如果不同,子串下标回到0,主串回到匹配第一个字符的下标加一的位置
//及cd匹配abcd 在a失配后从b开始重新比较
else
{
i=i-j+1;
j=0;
}
}
//如果子串循环完毕,则返回匹配成功的第一个字符的下标
if(j>=sub.length())
{
return i-j;
}
//否则返回-1
else
{
return -1;
}
}
测试
public static void main(String[] args) {
String str = "ababcabcdasdasd";
String sub = "abcd";
System.out.println(BF(str,sub, 0));
}
结果5