BF字符串匹配算法

Posted w&y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BF字符串匹配算法相关的知识,希望对你有一定的参考价值。

Brute Force算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;

若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。

 

 

代码示例:

 1 <?php
 2     //BF算法
 3     /**
 4     * 从第pos的下标开始查询,匹配成功则返回下标,否则返回false
 5     */
 6     function bf($s, $t, $pos=0)
 7     {
 8         $i = $pos;
 9         $j = 0;
10         $slength = strlen($s);
11         $tlength = strlen($t);
12         while($i+$j<$slength && $j<$tlength)
13         {
14             if($s[$i+$j] == $t[$j])
15             {
16                 $j++;
17             } else {
18                 $j = 0;
19                 ++$i;
20             }
21         }
22         if($j>=$tlength)
23         {
24             return $i;
25         } else {
26             return false;
27         }
28     }
29     
30     $s = \'ababcababa\';
31     $t = \'ababa\';
32     
33     $res = bf($s,$t,0);
34     var_dump($res);
View Code

 go代码:

 1 package main
 2 
 3 import "fmt"
 4 
 5 func main() {
 6     var str1, str2 = "abcdabcdefg", "bcd"
 7     index := bf(str1, str2)//必须是原字符串在第一个位置
 8     fmt.Printf("字符串%v, 在字符串%v中的位置为:%d\\n", str2, str1, index)
 9 }
10 
11 /**
12  * 1.两个字符串a和b下标分别记录i和j,循环条件i+j<len(a)&&j<len(b)
13  * 2.循环比较两字符串,a[i]==b[j], j++;否则i++,j=0
14  * 3.j>=len(b) 返回i;否则返回-1
15  */
16  func bf(a, b string) int {
17      var la, lb int
18      var i, j int = 0, 0
19      la = len(a)
20      lb = len(b)
21 
22      //循环对比俩字符串
23      for i+j<la && j<lb {
24         if a[i+j]==b[j] {
25             j++
26         } else {
27             j=0
28             i++
29         }
30     }
31 
32     if j >= lb {
33         return i
34     } else {
35         return -1
36     }
37  }

 

以上是关于BF字符串匹配算法的主要内容,如果未能解决你的问题,请参考以下文章

BF算法(蛮力匹配算法)

字符串匹配算法(BF算法&&KMP算法)

数据结构串---BF算法(朴素模式匹配)

字符串的模式匹配: BF算法

字符串模式匹配中的BF算法与KMP算法

Python 细聊从暴力(BF)字符串匹配算法到 KMP 算法之间的精妙变化