【各种算法】【kmp】复习

kmp算法:一种字符串匹配算法,可以处理两个串得匹配问题,求一个串在另一个串中出现次数,判断a是b的字串等等。
算法来源:考虑对于a,b串暴力匹配,枚举b串出现的位置之后,将位置后面b串长度个位置挨个匹配,这种算法将会多次遍历b串,对于很多情况,出现位置只向后移动一次并不能与b串匹配。
考虑我们先求出b串的前i位串的最长公共前后缀(border)。
有这样的性质:对于a串和b串匹配到一点失配,令b串从nxt(border)开始继续匹配,这样的做法可以保证b串匹配到了a的每个位置。
nxt的求法:nxt[i]可以用之前的nxt[j]推出:
当且仅当 string[nxt[j]+1]==string[i]
string[1...nxt[j]]==string[inxt[j].....i1]
所以可以初始一个j=i-1然后一直跳nxt[j]直到满足条件。

快省选了草草写个小总结,有可能有不对的地方。

你可能感兴趣的:(kmp,总结)