#include<bits/stdc++.h>
using namespace std;
void get_next(string t,int next[])
{
int i=0,j=-1;
next[0]=-1;
while(i<t.length())
{
if(j==-1||t[i]==t[j])
next[i++]=j++;
else
j=next[j];
}
}
int main()
{
string S,T;
cin>>S>>T;
int i,x=S.find(T),len=T.length();
int next[len];
get_next(T,next);
for(i=0;i<len;i++)
cout<<next[i]<<" ";
cout<<endl<<x;
return 0;
}
7-3 字符串模式匹配 (5 分)
给定主串s和模式串p,编写程序输出p在s中出现的首位置,若p不在s中则输出-1。字符串下标从0开始。
输入格式:
输入为2行,第1行主串s,第2行为模式串p。主串和模式串长度不超过100000。
输出格式:
输出为2行,第1行为若干整数,表示模式串p的失败函数值,每个整数后一个空格;第2行为一个整数,表示p在s中出现的首位置,若p不在s中则输出-1。
输入样例:
qwerabcabhlk
abcab
输出样例:
-1 -1 -1 0 1
4