KMP算法

来源:互联网 发布:qt多线程编程实例 编辑:程序博客网 时间:2024/06/13 15:50

KMP算法 

/*Name: KMP算法 Copyright: Author:cc Date: 15/04/17 19:56Description:kmp用于找出某一特定字符串,优点比较传统的方式在于能够充分使用到当字符串内一段字串匹配被丢弃的浪费,从而更加省时间。 */#include<iostream>using namespace std;typedef struct {char data[20];int length;}compare;void getNext(compare t,int next[]) //重要的是获取next[] {int j,k;j=0;k=-1;next[0]=-1;while(j<t.length-1){if(k==-1||t.data[j]==t.data[k]) {   j++;k++;next[j]=k; } else k=next[k];}}int KMPIndex(compare s,compare t){int next[20];int i=0,j=0;getNext(t,next);while(i<s.length&&j<t.length){if(j==-1||s.data[i]==t.data[j]){i++;j++;}else j=next[j];}if(j>=t.length)return(i+1-t.length);elsereturn(-1);}int main(){compare s={"dseasdfghjfrsrgrh",17},t={"fghj",4};//用于比较的两个字符串 cout<<KMPIndex(s,t);return 0;}