KMP算法-next数组的含义和求法
2016-11-09 20:22
211 查看
KMP 为字符串的匹配算法,主要定义了一个next数组来实现匹配的跳转
本文章主要讲讲next数组的含义以及求法
next[i]表示以当前第i个字符为结尾的匹配长度
如:
0 1 2 3 4 5 6 7 8 9
a b a b c a b a b
0 0 1 2 0 1 2 3 4 next[i]
next数组可以用来求重复子串的长度
(1)i - next[i] 最小循环节(第一个字母开始)
(2)next[i] 最大循环节中的第几位数(此时循环节可交叉)
(3)next[i] != 0 && i % (i - next[i]) == 0,当前是循环节中的最 后一位.
(4)在(3)的前提下 i / (i - next[i]) 表示的最大周期个数,也就是在最小循环节的前提下的最大周期个数。
本文章主要讲讲next数组的含义以及求法
next[i]表示以当前第i个字符为结尾的匹配长度
如:
0 1 2 3 4 5 6 7 8 9
a b a b c a b a b
0 0 1 2 0 1 2 3 4 next[i]
void makenext() { int i=0; int j=-1; next[0]=-1; int len=s.length(); while(i<len) { if(j==-1||s[i]==s[j]) { i++; j++; next[i]=j; } else j=next[j]; } }
next数组可以用来求重复子串的长度
(1)i - next[i] 最小循环节(第一个字母开始)
(2)next[i] 最大循环节中的第几位数(此时循环节可交叉)
(3)next[i] != 0 && i % (i - next[i]) == 0,当前是循环节中的最 后一位.
(4)在(3)的前提下 i / (i - next[i]) 表示的最大周期个数,也就是在最小循环节的前提下的最大周期个数。
相关文章推荐
- POJ 3461 Oulipo 深刻理解KMP算法next数组含义
- 超详细理解:kmp算法next数组求解过程和回溯的含义
- KMP算法中的next数组求解
- KMP算法NEXT数组计算方法
- KMP算法 求next数组的原理
- KMP算法next数组的计算
- KMP算法中next数组的计算方法
- KMP算法的next[]数组通俗解释
- kmp算法next数组的产生方法
- 计算KMP模式匹配算法中next数组的代码分析及改进型KMP算法中nextval数组代码分析
- kmp算法对应next数组中核心while部分的剖析
- KMP算法之最终实现及 NEXT数组的优化
- POJ 2752 KMP算法中next数组的应用
- KMP算法(next 数组讲解)
- 转载大神的~~~~~~ KMP算法的前缀next数组最通俗的解释,如果看不懂我也没辙了
- KMP算法运用next数组解决匹配
- KMP算法中next数组的构建
- (收藏)KMP算法的前缀next数组最通俗的解释
- KMP算法求next数组和nextval数组的简单方法
- KMP算法及Next数组求解方法