zoukankan      html  css  js  c++  java
  • 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
    ", 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  }
  • 相关阅读:
    APK Multi-Tool强大的APK反编译工具终极教程
    Android中Intent组件详解 .
    Android游戏开发之旅 View类详解
    深入理解Android中View
    SQLite学习手册(数据表和视图)
    转)sqlite 数据类型
    (转)SQLite内置函数
    Android权限Uri.parse的几种用法(转载)
    android中与SQLite数据库相关的类
    JDK核心包学习
  • 原文地址:https://www.cnblogs.com/573583868wuy/p/6719673.html
Copyright © 2011-2022 走看看