KMP算法(C)

来源:互联网 发布:湖畔大学网络公开课程 编辑:程序博客网 时间:2024/04/29 05:09
在做ACM题时遇到,参考《算法导论》实现的^_^
#include #include #include char P[10001];char T[1000001];int table[10000];void compute_table(const char *p){int i,j=-1;table[0]=-1;for(i=1;p[i];i++){while(j>=0&&p[j+1]!=p[i])j=table[j];if(p[j+1]==p[i])j++;table[i]=j;}}int kmp(const char *tar,const char *p){int i,j=-1,count=0;compute_table(p);for(i=0;tar[i];i++){while(j>=0&&p[j+1]!=tar[i])j=table[j];if(p[j+1]==tar[i])j++;if(!p[j+1]){count++;j=table[j];}}return count;}int main(int argc,char *argv[]){int N;scanf("%d",&N);getchar();while(N--){gets(P);gets(T);printf("%d/n",kmp(T,P));}}
PS:插入源代码里怎么没有C语言的选项?
原创粉丝点击