KMP
来源:互联网 发布:杭电网络教育 编辑:程序博客网 时间:2024/06/12 19:52
#include<stdio.h>#include<string.h>int next[100];char S[100],T[100];void getnext(char* T,int m){ int k,j; next[0]=-1; k=-1; j=0; while( j < m ) { if( k==-1 || T[k]==T[j] ) { j++; k++; next[j]=k; } else k=next[k]; }}int KMP(char* S,char* T,int n,int m){ int i,j; i=0; j=0; while( i<n && j<m ) { if( j==-1 || S[i]==T[j] ) { i++; j++; } else { j=next[j]; } } if( j>=m ) return i-m+1; else return -1;}int main(){ while(~scanf("%s%s",S,T)){ getnext(T,strlen(T)); int ans=KMP( S,T,strlen(S),strlen(T) ); printf("%d\n",ans); } return 0;}