zoukankan      html  css  js  c++  java
  • Java数据结构之字符串模式匹配算法---Brute-Force算法

    模式匹配

         在字符串匹配问题中,我们期待察看源串 “ S串 ” 中是否含有目标串 “ 串T ” (也叫模式串)。其中 串S被称为主串,串T被称为子串。

         1、如果在主串中查找到子串,则称为模式匹配成功,返回模式串的第一个字符在主串中出现的位置。

         2、如果在主串中未找到子串,则称为模式匹配失败,返回-1。

    在模式匹配过程中有两个比较经典的算法:Brute-Force与KMP算法是两种最经典的模式匹配算法。

    在本片中主要分析BF算法,很黄很暴力。下面是简单的思路解析:

         1.其基本思路是:从目标串s=“ s0s1…sn-1 ”的第一个字符开始和模式串t=“ t0t1…tm-1 ”中的第一个字符比较,若相等,则继续逐个比较后续字符,否则,从目标串s的第2个字符开始重新与模式串t的第一个字符进行比较,依次类推,若从目标串s的第i个字符开始,每个字符依次和模式串t中的对应字符相等,则匹配成功,该算法返回i;否则匹配失败,返回-1。

         2.举个栗子:

    设主串s=“cddcdc”,模式串t=“cdc”,模式匹配过程如图:

    //================================

     1 //字符串的模式匹配算法,之BF算法
     2 public class BruteForce {
     3     //
     4     /**
     5      * 
     6      * @param src
     7      *            主串
     8      * @param sub
     9      *            字串(模式串)
    10      * 算法比较简单,缺点是每一次进行回溯效率不高,回溯往往是没有必要
    11      */
    12     public static int bruteFore(String src, String sub) {
    13         int i = 0, j = 0;
    14         int index = -1;
    15         while (i < src.length() && j < sub.length()) {
    16             if (src.charAt(i) == sub.charAt(j)) {
    17                 i++;
    18                 j++;
    19             } else {
    20                 /**
    21                  * 这里理解一下下面的公式:该式子的目的是保证i的值在匹配不成功时不断向后+1 j其实表示已经成功匹配的字符数,
    22                  * i是一个不断累加的过程
    23                  */
    24                 i = i - j + 1;
    25                 j = 0;
    26             }
    27         }
    28         // 判断
    29         if (j == sub.length()) {
    30             // 此处表示在index处开始匹配,并且后面完全匹配成功
    31             index = i - sub.length();
    32         }
    33 
    34         return index;
    35     }
    36 }

    该算法与上面的图示例子对应,可以自己阅读理解。

    下转KMP算法

  • 相关阅读:
    使页面左右无法滑动(手机端)
    git使用简易指南(转)
    sql2012笔记
    C#的应用
    细谈HTML解析模块
    poj2299解题报告(归并排序求逆序数)
    poj2388解题报告(排序)
    poj3080解题报告(暴力、最大公共子串)
    poj1068解题报告(模拟类)
    poj3295解题报告(构造、算术表达式运算)
  • 原文地址:https://www.cnblogs.com/fuck1/p/6013543.html
Copyright © 2011-2022 走看看