kmp算法源码-经过比较,这个源码的速度应该是移动最快的。

来源:互联网 发布:调查问卷 代码java 编辑:程序博客网 时间:2024/06/08 14:44
#include<stdio.h>#include<stdlib.h>#include<string.h>void get_next(char *p, int len, int *next) {int j = -1;int i = 0;next[i] = -1;while(i < len - 1) {if(j == -1 || p[i] == p[j]) {++i;++j;if(p[i] != p[j]) {next[i] = j;} else {next[i] = next[j];}} else {j = next[j];}}}int kmp_search(char *text, int text_len, char *pattern, char pat_len, int *next) {int j = 0;int i = 0;while(i < text_len && j < pat_len) {if(j == -1 || text[i] == pattern[j]) {++i;++j;} else {j = next[j];}}if(j >= pat_len)return i - pat_len;else return -1;}void main() {char text[] = "1101001010100001101000011";char pattern[] = "01001010100001";int text_len = strlen(text);int pat_len = strlen(pattern);int *next = (int*)malloc(sizeof(int) * pat_len);memset(next, 0, sizeof(int) * pat_len);get_next(pattern, pat_len, next);int rst = kmp_search(text, text_len, pattern, pat_len, next);if(rst != -1)printf("%d\n", rst);elseprintf("not find yet!\n");}

原创粉丝点击