跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

kmp算法next计算方法

KMP Next数组计算方法:初始化Next[0] = -1,Next[1] = 0。遍历模式串从第二个字符开始。如果当前字符与Next[i-1]指向的字符相等,则Next[i] = Next[i-1] + 1。如果当前字符与Next[i-1]指向的字符不相等且Next[i-1]不为0,则i = Next[i-1],重复步骤3。如果当前字符与Next[i-1]指向的字符不相等且Next[i-1]为0,则Next[i] = 0。重复步骤 KMP Next数组计算方法 问题: 如何计算KMP算法中的Next数组? 回答: KMP算法的Next数组用于记录模式串中每个字符之前最长的前缀和后缀匹配长度。Next数组的计算方法如下: 步骤: 初始化: Next[0] = -1,Next[1] = 0。 开始遍历模式串从第二个字符开始: 如果当前字符与Next[i-1]指向的字符相等: Next[i] = Next[i-1] + 1 如果当前字符与Next[i-1]指向的字符不相等且Next[i-1]不为0: i = Next[i-1],重复步骤2 如果当前字符与Next[i-1]指向的字符不相等且Next[i-1]为0: Next[i] = 0 重复步骤2~5,直到遍历完模式串。 示例: 计算模式串“ababaca”的Next数组:
i | 1 | 2 | 3 | 4 | 5 | 6 | 7 Next[i] | -1 | 0 | 0 | 1 | 0 | 1 | 2
注意: Next[0]始终为-1,这是为了方便算法的实现。 Next[1]始终为0,因为长度为1的字符串的前缀和后缀匹配长度为0。 当当前字符与Next[i-1]指向的字符不相等且Next[i-1]不为0时,需要回溯到Next[i-1],继续寻找最长的前缀和后缀匹配。

相关文章