一. 什么是KMP算法
KMP算法是我们数据结构串中最难也是最重要的算法。因为KMP算法的代码很优美简洁干练,但里面包含着非常深的思维。 KMP算法就是字符串的模式匹配算法 解决 的问题:有一个模式字符串p,设其长度是lenp,以及另一个字符串str,设其长度lenstr,找出p在str中第一次出现的位置,显然要求lenstr>=lenp。
二. 暴力搜索解决匹配
假设现在我们面临这样一个问题:有一个文本串S,和一个模式串P,现在要查找P在S中的位 置, 怎么查找呢?
如果用暴力匹配的思路,并假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置,则有:
如果当前字符匹配成功(即S[i] == P[j]),则i++,j++,继续匹配下一个字符;
如果失配(即S[i]! = P[j]),令i = i - (j - 1),j = 0。相当于每次匹配失败时,i 回溯,j 被置为0。
理清楚了暴力匹配算法的流程及内在的逻辑,咱们可以写出暴力匹配的代码,如下
package c11KMP;
import java.util.Scanner;
import com.sun.org.apache.xerces.internal.util.SynchronizedSymbolTable;
public