help me,那个输出k是我测试的
查看原帖
help me,那个输出k是我测试的
1229346
yangyoulin楼主2023/12/19 00:29

#include "stdio.h"

#include "string.h"

char a[10000005],b[10000005];

long long next[10000005],s[10000005],next1[10000005];

void nextshuzu(){

int j=0;

int len=strlen(b);

next[0]=0;

for(int i=1;i<len;i++){

while(b[i]!=b[j]&&j>0){

j=next1[j-1];

}

if(b[i]==b[j]){

j++;

}

next1[i]=j;

}

for(int i=0;i<len;i++)
printf("%lld ",next1[i]);

}

void f() {

long long k,j,len;

next[0]=-1;

len=strlen(b);

k=-1;

for(j=0;j<len-1;)

{
	if(k==-1||b[k]==b[j])
	{
		k++;
		j++;
		next[j]=k;			
	}
	else k=next[k];
	
	
}

}

main()

{ long long i,j,lena,lenb,k=0;

scanf("%s\n%s",a,b);

f();
lena=strlen(a);
lenb=strlen(b);
j=0;
for(i=0;i<lena;)
{
	if(j==-1||a[i]==b[j])
	{
		j++;
		i++;			
	}
	else j=next[j];
	
	if(j==lenb) { s[k++]=i-j+1;  j=0; i--;}
	
	
}

	printf("%lld\n",k);
      for(i=0;i<k;i++)
printf("%lld\n",s[i]);
nextshuzu();

/*if(j==lenb) printf("%d",i-j);*/

}

2023/12/19 00:29
加载中...