kmp匹配算法的重点在于next数组
next数组存在的意义在于每次匹配失败后可以部分利用先前匹配的结果,不用全部从头匹配
next数组对子串进行计算,next数组的含义是该位置之前的字符串
的前缀后缀字符串最长匹配长度
则在当前位置匹配失败之后可以保留前缀后缀字符串最长匹配长度不用重做,则匹配指针跳跃到next所指示的位置,重新进行匹配,直到匹配指针指向0位置仍匹配不成功,则匹配指针在0,主串指针++
next数组计算的方法本身利用了next数组的性质,有递归的意味
next数组的0和1位置的值是固定的,0位置值为-1,1位置值为0
设置一个前后缀匹配指针在0
计算之后每一个位置的值:
- 该位置前一个值与匹配指针指示的值相同
- 则计算位置的值为匹配指针位置+1
- 计算位置和匹配指针同时++
- 不相同
- 匹配指针跳到next所指示位置
- next !=-1
- 正常比较
- next==-1
- 计算值填为0之后++
- next !=-1
- 匹配指针跳到next所指示位置