KMP数组之应用之 最长重复子串的求取(不太好形容)
2013-04-02 09:43
260 查看
#define N 100 int next ; int getNext(char *des) { int i;//i为串的后缀 int j;//j为串的前缀 i=0; j=-1; next[i]=-1; while(i<strlen(des)) { if(j==-1||des[i]==des[j]) { i++;j++;//前缀和后缀后移 //next[i]=j;//无优化 if(des[i]!=des[j]) { next[i]=j; } else next[i]=next[j];//回溯到底 } else {//前缀回溯 j=next[j]; } } return i; } int _tmain(int argc, _TCHAR* argv[]) { char* des=new char[100]; char* str="ababa"; strcpy(des,str); getNext(des); printf("%d",next[strlen(des)]); return 0; }
需要修改的仅仅是求取NExt数组的循环次数,这里需要求取到整个子串下一个串的next
到此为止,KMP算法完毕
相关文章推荐
- 后缀数组应用4: 求不可重叠最长重复子串
- poj 3261 后缀数组 Or KMP 可重叠的 k 次最长重复子串
- 后缀数组的应用:最长重复(or回文)子串
- poj1743 Musical Theme 后缀数组的应用(求最长不重叠重复子串)
- 查找一段文字中最长的重复字串 – 编程珠玑(排过序的后缀数组的应用)
- 后缀数组求最长重复子串
- 面试题[后缀数组]: 最长重复子串
- poj 3261 后缀数组 可重叠的 k 次最长重复子串
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 转载:查找一段文字中最长的重复字串 - 编程珠玑(排过序的后缀数组的应用)
- 最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和
- poj1743(后缀数组+二分--不可重叠最长重复子串)
- POJ 3261 Milk Patterns (后缀数组,求可重叠的k次最长重复子串)
- POJ 1743 Musical Theme(后缀数组[不可重叠最长重复子串])
- 【转】后缀数组求最长重复子串
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 贪心法应用:不含重复字符的最长子串
- POJ - 3261 Milk Patterns (后缀数组求可重叠的 k 次最长重复子串)
- POJ 1743 Musical Theme (后缀数组,求最长不重叠重复子串)
- POJ 1743 Musical Theme (后缀数组加二分求不可重叠最长重复子串)