明明写的和课本一样,但是在PTA就是不正确,参考了别人的答案,发现有一个地方不一样记录一下!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int next1[1000];
//next1[j] = k,表示当T[i] != P[j]时,j指针的下一个位置。
//求字串在主串中第一次出现的位置
void get_next1(char T[1000],int next1[],int len)
{
int i=1,j=0;
next1[1]=0;
while(i<len)
{
if(j==0||T[i-1]==T[j-1])
{
++i;
++j;
next1[i]=j;
}
else
j=next1[j];
}
}
int main()
{
char s1[1000],s2[1000];
gets(s1);
gets(s2);
int len1=strlen(s1);
int len2=strlen(s2);
// if(len1>len2)
// {
// printf(" 0");
// return 0;
// }
// int flag=1;
get_next1(s1,next1,len1);
int i,j;
for(i=1; i<=len1; i++)
printf("%3d",next1[i]);
printf("\n");
i=0,j=0;
while(i<len1&&j<len2)
{
if(s1[i]==s2[j])
{
i++;
j++;
}
else
{
j=j-i+1;
i=0;
}
}
if(i==len1)
{
printf("%3d",j-i+1);
// flag=1;
}
else
printf(" 0");
// if(flag==0)
// printf(" 0");
return 0;
}