1282. Computer Game

来源:互联网 发布:宿舍用品专卖店淘宝 编辑:程序博客网 时间:2024/06/06 12:57

soj.me/1282

字符串匹配的KMP算法

参考http://www.cnblogs.com/mjc467621163/archive/2011/07/16/2108423.html和

http://zh.wikipedia.org/wiki/%E5%85%8B%E5%8A%AA%E6%96%AF-%E8%8E%AB%E9%87%8C%E6%96%AF-%E6%99%AE%E6%8B%89%E7%89%B9%E7%AE%97%E6%B3%95

#include <iostream>using namespace std;int a[1000000],b[80000],lenA,lenB,Next[80000];void initialNext(){Next[1]=0;int j=0;for(int i=2;i<=lenB;i++){while(j>0&&b[j+1]!=b[i])  j=Next[j];if(b[j+1]==b[i]) j++;Next[i]=j;}}void kmp(){int j=0;for(int i=1;i<=lenA;i++){while(j>0&&b[j+1]!=a[i]) j=Next[j];if(b[j+1]==a[i]) j++;if(j==lenB){cout<<i-lenB<<endl;return ;}}cout<<"no solution"<<endl;}int main(){while(cin>>lenB){for(int i=1;i<=lenB;i++)cin>>b[i];cin>>lenA;for(int i=1;i<=lenA;i++)cin>>a[i];initialNext();kmp();}return 0;}


原创粉丝点击