KMP模式匹配 三(弦)
KMP模式匹配 三(串)
Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%lld
& %llu
Description
输入一个主串和一个子串,若匹配成功,则找出匹配的趟数和在子串在主串中的位置,若匹配不成功,则输出0
Input
输入两个字符串
Output
输出匹配的趟数和位置
Sample Input
ababcabcacbab abcac
Sample Output
3 6
#include<iostream> #include<cstring> using namespace std; int a[100000]; char c[10000]; char b[100000]; int main() { int j,n,i,k; cin>>c; cin>>b; a[0]=-1; j=-1; i=0; while(b[i]!='\0') { if(j==-1||b[j]==b[i]) { j++;i++; // if(b[i]!=b[j]) a[i]=j; // else // {if(a[j]==-1) // a[i]=0; // else // a[i]=a[j];} } else j=a[j]; } i=0; j=0;k=0;n=1; while(c[i]!='\0') { if(c[i]==b[j]) {i++;j++;if(b[j]=='\0'){k=1;break;}} else if(a[j]==-1){i++;j=0;n++;} else {j=a[j];n++;} } i=i-strlen(b)+1; if(k==0) cout<<-1<<endl; else cout<<n<<' '<<i<<endl; return 0; }
版权声明:本文博主原创文章,博客,未经同意不得转载。