再预处理数组时p[i]表示的在模式串前i个字符中前缀和后缀最大公共长度
//例如下模式串ababa p[1]=0; p[2]=1; p[3]=2; p[4]=2; p[5]=3;
在kmp时,移动j要用while
输入
char a[10],b[10]; cin>>a+1>>b+1;
KMP时判断字符是否相等要+1
while(j>0&&s1[i+1]!=s2[j+1]) j=p[j];
if(s1[i+1]==s2[j+1])
{
j++;
}if(j==m)
{
printf("%d\n",i-m+2);
j=p[j];
}
要预处理匹配串和模式串的长度。