KMP算法是一个设计精巧的匹配查找算法,用于查找2个字符串或者序列,一个(小的)在另一个(大的)中最佳匹配位置。算法的核心思想是跳过一些已经确定不会匹配的部分。
python实现如下:
#:KMP字符串匹配算法
def KMP(bigStr:str, smallStr:str, all = False)->(list,bool, int):
'''
KMP算法,用于查找后字符串在前面字符串的匹配位置。
:param bigStr: 包含的字符串
:param smallStr: 要检测是否含有的字串
:param all: 是否要找到所有的位置。默认为false
:return: 匹配(或最佳匹配)的位置的列表,从0开始,-1为完全没有找到。
bool变量是否是精确匹配。最后第三个返回值是匹配的长度。
'''
def cal_next(string:str)->np.ndarray:
'''
KMP算法所需要的子函数
:param string:
:return:
'''
k = -1
length = len(string)
nextArr = -np.ones(length,dtype=int) #全赋值为-1,不过算法里只要【0】赋值为-1即可
for qq in range(1,length):
while string[k + 1] != string[qq] and k>-1: