-
蛮力(Brute Force)
-
KMP
-
Boyer-Moore
-
Karp-Rabin / Rabin-Karp
-
Sunday
下面用 tlen
代表文本串 text 的长度,plen
代表模式串 pattern 的长度;
==================================================================================
- 以字符为单位,从左到右移动模式串,直到匹配成功 ;
蛮力算法有 2 种常见实现思路:
/**
- 蛮力匹配
*/
public static int indexOf(String text, String pattern) {
if (text == null || pattern == null) return -1;
char[] textChars = text.toCharArray();
int tlen = textChars.length;
char[] patternChars = pattern.toCharArray();
int plen = patternChars.length;
if (tlen == 0 || plen == 0 || tlen < plen) return -1;
int pi = 0, ti = 0;
while (pi < plen && ti < tlen) {
if (textChars[ti] == patternChars[pi]) {
ti++;
pi++;
} else {
ti = ti - pi + 1;
// ti -= pi - 1;
pi = 0;
}
}
return pi == plen ? ti - pi : -1;
}
/**
- 蛮力匹配 - 改进
*/
public static int indexOf(String text, String pattern) {
if (text == null || pattern == null) return -1;
char[] textChars = text.toCharArray();
int tlen = textChars.length;
char[] patternChars = pattern.toCharArray();
int plen = patternChars.length;
if (tlen == 0 || plen == 0 || tlen < plen) return -1;
int pi = 0, ti = 0;
while (pi < plen && ti - pi <= tlen - plen) { // ti - pi <= tlen - plen 是关键
if (textChars[ti] == patternChars[pi]) {
ti++;
pi++;
} else {
ti = ti - pi &#