#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int next[1000000],zhui[1000000];
void get_next(string T,int next[])
{
int i=0,j=-1;
next[0]=-1;
while(i<T.length()-1)
{
if(j==-1||T[i]==T[j])
{
i++,j++;
next[i]=j;
}
else
j=next[j];//逐渐回到j=0的状态
}
}
void get_zhui(string t,int zhui[])//找字符串的前缀
{
zhui[0]=0;
int p=1,s=0;
while(p<t.length())
{
s=0;
while(t[s]==t[p-s]&&s<(p-s))
s++;
zhui[p]=s;
p++;
}
}
int index_kmp(string s,string t,int pos)
{
int i=pos,j=0;
while(i<s.length()&&j<t.length())
{
if(j==-1||s[i]==t[j])
{
j++,i++;
}
else j=next[j];
}
if(j==t.length())
return i-j;
else return -1;
}
int main()
{
string s,t;
int p=0,max=0;
cin>>s>>t;
get_next(t,next);
get_zhui(t,zhui);
while(p<=s.length()-t.length()+1)
{
if(index_kmp(s,t,p)+1!=0)
cout<<index_kmp(s,t,p)+1<<endl;
if(index_kmp(s,t,p)+1==0)
p++;
else
p=index_kmp(s,t,p)+1;
}
for(p=0;p<t.length();p++)
{
cout<<zhui[p]<<' ';
}
return 0;
}
04-17
399
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
08-27
565
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交