码迷,mamicode.com
首页 > 其他好文 > 详细

我的kmp

时间:2014-09-27 23:41:21      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:io   os   ar   sp   c   amp   r   bs   as   

    贴一个我实现的kmp,在这里我的next数组的定义是,上一个前缀和我当前前缀相同的位置应该在哪里,next[0]=-1

ababac的next数组就是-1,-1,0,1,2-1

#include<iostream>
using namespace std;
int next[10001];
void getnext(char *s){
    int i=1,j;
    next[0]=-1;
    while(s[i]!=‘\0‘){
        j=next[i-1];
        while(s[j+1]!=s[i]&&j!=-1)
            j=next[j];
        if(s[j+1]==s[i]) next[i]=j+1;
            else next[i]=-1;
        i++;
    }
}
void kmp(char*s,char *t)//ÔÚsÖÐÕÒt£»{
    getnext(t);
    int i=0,j=-1,n=strlen(t);
    while(s[i]!=‘\0‘){
            while(t[j+1]!=s[i]&&j!=-1)  j=next[j];
            if(s[i]==t[j+1]) j++;
            if(t[j+1]==‘\0‘){ cout<<i-n+1<<endl;j=next[j-1]+1;}
            i++;
    }
}
int main()
{
    char s[20002],t[20002];
    while(gets(s))
    {
        gets(t);
        kmp(s,t);
    }
}



我的kmp

标签:io   os   ar   sp   c   amp   r   bs   as   

原文地址:http://my.oschina.net/zwj0571/blog/322687

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!