KMP算法
来源:互联网 发布:怎么看淘宝卖家淘金币 编辑:程序博客网 时间:2024/04/30 19:48
下面的程序对next生成算法进行了优化,比前面的方法快。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int index_kmp(char S[ ], char T[ ], int next[])
{
int i, j, S_len = strlen(S), T_len = strlen(T);
i = j = 0;
while (i < S_len && j < T_len) {
if (j == -1 || S[ i ] == T[ j ]) { i++; j++;}
else { j = next[ j ]; }
}
if (j == T_len) return (i - T_len);
return -1;
}
void get_next(char T[ ], int next[])
{
int i, j, T_len = strlen(T);
i = 0; j = -1;
next[0] = -1;
while (i < T_len - 1) {
if (j == -1 || T[ i ] == T[ j ]) {
i++; j++;
if (T[ i ] == T[ j ])
next[ i ] = next[ j ];
else
next[ i ] = j;
}
else j = next[ j ];
}
}
#define MAX_SIZE 256
int main()
{
char szMain[MAX_SIZE];
char szSub[MAX_SIZE];
int i, iIndex, iSubLen, aiNext[MAX_SIZE];
printf("input main string:/n");
scanf("%255s", szMain);
printf("input sub string:/n");
scanf("%255s", szSub);
get_next(szSub, aiNext);
iSubLen = strlen(szSub);
printf("next[]: ");
for (i = 0; i < iSubLen; i++)
{
printf("%d ", aiNext[i]);
}
printf("/n");
iIndex = index_kmp(szMain, szSub, aiNext);
printf("index = %d/n", iIndex);
fgets(szMain, MAX_SIZE, stdin);
getchar();
return 0;
}
- KMP算法详解 【KMP】
- 【KMP】KMP算法模板
- KMP hihoCoder1015 KMP算法
- kmp算法
- KMP算法
- KMP算法
- KMP算法
- KMP算法
- KMP 算法
- kmp算法
- KMP算法
- kmp算法
- KMP算法
- KMP算法
- kmp算法
- kmp算法
- KMP算法
- KMP算法
- [转]严重质疑J2EE
- mp3播放器
- 每个.NET 开发人员应该下载的十个必备工具
- 富翁富婆共同拥有的九大特质
- 印度软件公司在华争夺人才 有望引起薪资上浮[转]
- KMP算法
- 第一篇
- struts读书笔记一 (9.27)
- 人生中的抉择
- AJAX基础教程
- struts读书笔记二 (9.28)
- 一休の歌
- 用好Delphi中的字符串
- Delphi控制Excel2000