KMP算法

第三次数据结构作业。

描述:主串text,模式串pattern,求模式串在主串中出现的第一个位置,若不匹配,返回-1。

直接KMP:

#include <stdio.h> #include <string.h> #define SIZE 1000 //the max size of text char text[ SIZE ] , pattern[ SIZE ] ; int next[ SIZE ] ; int n , m , i , j ; // n:the length of text m:the length of pattern void get_next( ) { i = 0 , j = -1 ; next[ 0 ] = -1 ; while( i < m ) { if( j == -1 || pattern[i] == pattern[j] ) { ++i ; ++j ; next[i] = j ; } else j = next[j] ; } } int KMP( ) { i = j = -1 ; while( i < n && j < m ) { if( j == -1 || text[i] == pattern[j] ) { ++i ; ++j ; } else j = next[j] ; } if( j >= m ) return i - m ; else return -1 ; } int main( ) { while( scanf( "%s%s" , text , pattern ) == 2 ) { n = strlen( text ) , m = strlen( pattern ) ; get_next( ) ; printf( "%d/n" , KMP( ) ) ; } return 0 ; } 

关于KMP算法网上很多,给出几个自认为还可以的网站:

http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm

http://blog.csdn.net/liuben/archive/2009/08/04/4409505.aspx

http://blog.pfan.cn/rickone/15762.html

http://www.blogjava.net/kafka0102/archive/2007/06/17/124846.html

http://www.juliuschen.com/archives/21.html

http://www.csufox.com/kmp.html

你可能感兴趣的:(KMP算法)