您的位置:首页 > 其它

关于BF算法的理解——文本匹配算法

2015-05-20 16:50 501 查看
前几天在研究模板匹配的算法,接触了BF,KPM,BM,BMH,BMHS算法,所以就想来记录一下,顺便加强对算法的理解。如果理解有什么问题还请大家指正。

BF算法又称为朴素模式匹配算法,这是最简单的模式匹配算法。它的想法是很简单的,所以基本上和暴力匹配有点类似。


如图的匹配方式,用i作为记录模板匹配到文本的具体位置,用两个指针j和k进行字母配对,顺序从文本的头到尾遍历,首字母和尾字母相同则进行字母的匹配。以下是java实现的程序。

public int strStr(String haystack, String needle) {
if(haystack == null || needle == null)
return -1;
if(haystack.equals("") && needle.equals(""))
return 0;
if(needle.equals(""))
return 0;
if(haystack.equals(""))
return -1;
char[] source = haystack.toCharArray();
char[] target = needle.toCharArray();
int source_len = haystack.length();
int target_len = needle.length();
if(source_len < target_len)
return -1;
if(source_len == target_len)
{
if(haystack.equals(needle))
return 0;
else
return -1;
}
char firstChar = target[0];
char lastChar = target[target_len - 1];
for(int i = target_len - 1; i < source_len; i++)
{
int j = i - target_len + 1;
if(source[j] != firstChar)
continue;
if(source[i] != lastChar)
continue;
int k = 0;
for(;j < i; j++,k++)
{
if(source[j] != target[k])
break;
}
if(j == i)
return j - target_len + 1;
}
return -1;
}
如果想要测试是否正确,同时要保证数据量,可以去leetcode上进行测试,这是网址

顺便提一句,java中的string.indexof()的实现源代码与此类似。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: