目录

Brute-Force算法

# 基本思路是

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

# 举个栗子:

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

img

# 实现代码:

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