1 定义
字符串是由0个或多个字符组成的有限序列,是一种特殊的线性表,数据元素之间呈现线性关系。
2 字符串匹配
字符串匹配时可以采取常规的一个个对比移位匹配,也可以采用KMP算法进行匹配。
3 KMP算法
相比于传统移位匹配的方法,KMP算法在匹配失败时,不再进行移位重头开始匹配,而是会跳转到前一位标记的下标处开始进行匹配,从而减少匹配次数。
通常会采用一个next数组来表示不匹配时,应该回退到那个地方。
具体代码如下所示:
s = 'aabaabaaf'
next = [0]*len(s)
j,i = 0,1
while i<len(s):
while j>0 and s[j]!=s[i]:
j = next[j-1]
if s[j]==s[i]:
j+=1
next[i]=j
i+=1
print(next)
#[0, 1, 0, 1, 2, 3, 4, 5, 0]
备注:next数组可能有多种表达方式,有的可能会将其整体右移移位,next[0]初始为-1,有的可能则是全体减1,具体情况需具体分析。