字符串与模式匹配算法(一):BF算法

一、BF算法的基本思想

  BF(Brute Force)算法是模式匹配中最简单、最直观的算法。该算法最基本的思想是从主串的第 start 个字符起和模式P(要检索的子串)的第1个字符比较,如果相等,则逐个比较后续字符;比较过程中一旦发现不相等的情况,则回溯到主串的第 start+1 个字符位置,重新和模式P的字符进行比较。

二、算法代码

 1 package algorithm;
 2
 3 import java.util.Scanner;
 4
 5 /**
 6  * 字符串匹配算法:BF
 7  */
 8 public class BF {
 9     // 主串
10     private String s1;
11     // 目标串
12     private String s2;
13
14     /**
15      * 控制台输入主串、目标串
16      * 使用{@link Scanner#nextLine}能接收当前行(非结尾的)的其余部分,包括空格。
17      * 当然使用Scanner是其中的一种方法。
18      */
19     public void read() {
20         // 输入主串
21         System.out.println("请输入主串: ");
22         Scanner scan = new Scanner(System.in);
23         // 输入要匹配得字符
24         System.out.println("请输入目标串: ");
25         Scanner aim = new Scanner(System.in);
26         if (scan.hasNext()) {
27             s1 = scan.nextLine();
28             System.out.println("输入的主串为:" + s1);
29         }
30         if (aim.hasNext()) {
31             s2 = aim.nextLine();
32             System.out.println("输入的目标串为:" + s2);
33         }
34
35         if (s1.length() < s2.length()) {
36             System.out.println("主串长度必须大于目标串,请重新输入!");
37             read();
38         }
39
40         // 关闭
41         scan.close();
42         aim.close();
43     }
44
45     /**
46      * 字符串匹配算法BF,算法平均时间复杂度为O((n-m)m),n为主串长度,m为目标串长度。
47      *
48      * @param start 从主串的start位置开始匹配
49      * @return true 匹配成功,反之失败
50      */
51     public boolean bf(int start) {
52         read(); // 输入主串,目标串参数
53         int i, j;
54         for (i = start; i < s1.length() - s2.length(); ) {
55             for (j = 0; j < s2.length(); j++) {
56                 if (s1.charAt(i) != s2.charAt(j)) {
57                     i++;
58                     break;  // 从主串下一个字符重新开始找起,就像回溯
59                 } else {
60                     i++;    // 匹配成功,开始对比两个串的下一个字符
61                 }
62                 // 目标串匹配完后,返回会匹配成功的结果
63                 if (j == s2.length() - 1) {
64                     return true;
65                 }
66             }
67         }
68         return false;
69     }
70
71 }

  BF算法平均时间复杂度为O((n-m)m),n为主串长度,m为目标串长度。BF算法可能会频繁地回溯,工作效率不会很高。

原文地址:https://www.cnblogs.com/magic-sea/p/11802524.html

时间: 2024-10-06 21:59:42

字符串与模式匹配算法(一):BF算法的相关文章

常用算法3 - 字符串查找/模式匹配算法(BF &amp; KMP算法)

相信我们都有在linux下查找文本内容的经历,比如当我们使用vim查找文本文件中的某个字或者某段话时,Linux很快做出反应并给出相应结果,特别方便快捷! 那么,我们有木有想过linux是如何在浩如烟海的文本中正确匹配到我们所需要的字符串呢?这就牵扯到了模式匹配算法! 1. 模式匹配 什么是模式匹配呢? 模式匹配,即子串P(模式串)在主串T(目标串)中的定位运算,也称串匹配 假设我们有两个字符串:T(Target, 目标串)和P(Pattern, 模式串):在目标串T中查找模式串T的定位过程,称

串的模式匹配算法(BF算法和KMP算法)

串的模式匹配算法 子串的定位操作通常称为串的 模式匹配,其中T称为 模式串. 一般的求子串位置的定位函数(Brute Force) 我写java的代码是这样的 int index(String S,String T,int pos){ char[] s_arr = S.toCharArray(); char[] t_arr = T.toCharArray(); int i,j,k;//i是主串S的指针,j是模式串的指针 if(pos < 0 || pos>S.length() || S.len

数据结构- 串的模式匹配算法:BF和 KMP算法

Brute-Force算法的思想 1.BF(Brute-Force)算法 Brute-Force算法的基本思想是: 1) 从目标串s 的第一个字符起和模式串t的第一个字符进行比较,若相等,则继续逐个比较后续字符,否则从串s 的第二个字符起再重新和串t进行比较. 2) 依此类推,直至串t 中的每个字符依次和串s的一个连续的字符序列相等,则称模式匹配成功,此时串t的第一个字符在串s 中的位置就是t 在s中的位置,否则模式匹配不成功. Brute-Force算法的实现 c语言实现: [cpp] vie

BF算法与KMP算法

BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符:若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果. BF算法实现: 1 int BF(char S[],char T[],int pos) 2 {//c从第pos位开始搜索匹配 3 int i=pos,j=0; 4 while(S[i+j]!='\0'&&T[j]!='\0')

24、蛤蟆的数据结构笔记之二十四串的模式匹配算法

24.蛤蟆的数据结构笔记之二十四串的模式匹配算法 本篇名言:"燧石受到的敲打越厉害,发出的光就越灿烂. -- 马克思" 来看下两个算法,BF和KMP算法在串的模式匹配中实现. 欢迎转载,转载请标明出处: 1.  BF算法 BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符:若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果.B

BF算法

BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符:若不相等,则比较S的第二个字符和P的第一个字符,依次比较下去,直到得出最后的匹配结果. 1 //BF算法 2 #include <iostream> 3 4 using namespace std; 5 6 int main(){ 7 char dst[] = "ababa"; 8 char src[] = "ab

[转] 字符串模式匹配算法——BM、Horspool、Sunday、KMP、KR、AC算法一网打尽

字符串模式匹配算法——BM.Horspool.Sunday.KMP.KR.AC算法一网打尽 转载自:http://dsqiu.iteye.com/blog/1700312 本文内容框架: §1 Boyer-Moore算法 §2 Horspool算法 §3 Sunday算法 §4 KMP算算法 §5 KR算法 §6 AC自动机 §7 小结 §1 Boyer-Moore(BM)算法 Boyer-Moore算法原理 Boyer-Moore算法是一种基于后缀匹配的模式串匹配算法,后缀匹配就是模式串从右到

Java数据结构之字符串模式匹配算法---Brute-Force算法

模式匹配 在字符串匹配问题中,我们期待察看源串 " S串 " 中是否含有目标串 " 串T " (也叫模式串).其中 串S被称为主串,串T被称为子串. 1.如果在主串中查找到子串,则称为模式匹配成功,返回模式串的第一个字符在主串中出现的位置. 2.如果在主串中未找到子串,则称为模式匹配失败,返回-1. 在模式匹配过程中有两个比较经典的算法:Brute-Force与KMP算法是两种最经典的模式匹配算法. 在本片中主要分析BF算法,很黄很暴力.下面是简单的思路解析:  

字符串模式匹配算法--详解KMP算法

在软考的复习中,看到过几次  字符串的模式匹配算法.看起来挺难的.所以花了点时间查了查关于字符串匹配的算法.下面详细介绍一下KMP模式匹配算法 什么是字符串的匹配? 在文章中进行查找.需要找到要查找的内容所在的位置.就是字符串的匹配. 朴素的模式匹配算法 朴素的模式匹配算法,就是把要查找的内容,一步步的与要查找的文章进行进行比较.如果匹配失败,则主串和字串回溯.字串位置加1.重新匹配. 模式匹配算法的流程如下: 在匹配失败的情况下,模式串仅右移一个 之后.在从头开始匹配. 两个for循环 For