string S,P;
cin>>S>>P;
int n=S.size(),m=P.size();
for(int k=0;k<=n-m;k++) //枚举S串开始位置
{
int i=k,j=0; //i为S的指针,j为P的指针
while(j
算法时间复杂度:O(n*m),n和m表示字符串长度
——————————————————————我 是 分 割 线————————————————————————
KMP算法-算法流程

KMP时间复杂度:O(m+n) // O(m) 求 nxt[ i ]
具体去洛谷理解一下吧
#include
#include
#include
#include
#include
#include
using namespace std;
string a,b;
int nxt[1000005]={0};
int ans[1000005]={0},num=0;
void nxtt(string s)
{
int len=s.size();
nxt[0]=nxt[1]=0;
for(int i=1;i>a>>b;
nxtt(b);
kmp(a,b);
for(int i=1;i<=num;i++) printf("%d
",ans[i]);
for(int i=1;i<=b.size();i++) printf("%d ",nxt[i]);
return 0;
}