Brute-Force算法
# 基本思路是:
从目标串s=“ s0s1…sn-1 ”的第一个字符开始和模式串t=“ t0t1…tm-1 ”中的第一个字符比较,若相等,则继续逐个比较后续字符,否则,从目标串s的第2个字符开始重新与模式串t的第一个字符进行比较,依次类推,若从目标串s的第i个字符开始,每个字符依次和模式串t中的对应字符相等,则匹配成功,该算法返回i;否则匹配失败,返回-1。
# 举个栗子:
设主串s=“cddcdc”,模式串t=“cdc”,模式匹配过程如图:
# 实现代码:
//字符串的模式匹配算法,之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
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