关于模式匹配算法,在这里我想总结一下KMP算法。

KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。时间复杂度O(m+n)。

 

然后上下代码:

public static int KMP(String ts, String ps) {

char[] t = ts.toCharArray();

char[] p = ps.toCharArray();

int i = 0; // 主串的位置

int j = 0; // 模式串的位置

int[] next = getNext(ps);

while (i < t.length && j < p.length) {

if (j == -1 || t[i] == p[j]) { // 当j为-1时,要移动的是i,当然j也要归0

i++;

j++;

} else {

// i不需要回溯了

// i = i - j + 1;

j = next[j]; // j回到指定位置

}

}

if (j == p.length) {

return i - j;

} else {

return -1;

}

}

 

这章学的其实很不踏实,代码也没怎么练习去敲。所以还有好多地方都一动手就懵,之后需要花时间来好好在看看这章内容了

相关网站:https://baike.baidu.com/item/kmp%E7%AE%97%E6%B3%95/10951804?fr=aladdin

https://www.cnblogs.com/yjiyjige/p/3263858.html