kmp算法

来源:互联网 发布:淘宝手机端的收藏链接 编辑:程序博客网 时间:2024/06/09 17:22
#include <iostream>using namespace std;const int maxn = 60010; int s[maxn],a[maxn];int * bulid(int* s,int len) {    int * next = new int[len];    next[0] = -1;    int p = 0;    int k = -1;    while (p<len-1) {        if(k==-1||s[p]==s[k]) {            p++;            k++;            next[p] = k;        } else {            k = next[k];        }    }    return next;}int main() {    int len1;    while (cin>>len1) {        for (int i=0;i<len1;i++) cin>>s[i];        int len2;        cin>>len2;        for (int i=0;i<len2;i++) cin>>a[i];        int i=0,j=0;        int* next = bulid(s,len1);        while (i<len1&&j<len2) {            if(i==-1||s[i]==a[j]) {                i++;                j++;            } else  i = next[i];        }        delete []next;        if (i==len1) cout<<j-i<<endl;        else cout<<"no solution"<<endl;          }}                                 
0 0
原创粉丝点击