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);
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字符串匹配算法的主要内容,如果未能解决你的问题,请参考以下文章