KMP算法

来源:互联网 发布:阿里云 cdn ddos 编辑:程序博客网 时间:2024/05/17 19:18
#include <iostream>using namespace std;void kmp_getnext(char *partten, int *next) {int m = strlen(partten);int i = 0, j = -1;next[i] = j;     while ( i < m + 1 ) {while ( j >= 0 && partten[i] != partten[j] ) //表示第i + 1个元素不等于第j + 1个元素j = next[j]; //前j个字符partten[0---(j-1)]的最大前缀存放在next[j]中i++;j++;next[i] = j;}}void kmp_search(char *text, char *partten, int *next) {int n = strlen(text);int m = strlen(partten);int i = 0;int j = 0;while ( i < n) {while ( j >= 0 && text[i] != partten[j] )j = next[j];i++;j++;if ( j == m ) {printf("%d\t", i - j + 1);j = next[j];}}}int main(void) {char *text = "aababaababacb";char *partten = "ababacb";int m = strlen(partten);int *next = (int *)malloc((m + 1) * sizeof(int));kmp_getnext(partten, next);kmp_search(text, partten, next);return 0;}

0 0
原创粉丝点击