为什么这两个测试点和其他的运行时间差这么多,哪里有问题呢?求助。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
public class Main {
static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
static String nextS() throws Exception{
in.nextToken();
return in.sval;
}
static PrintWriter out = new PrintWriter(System.out);
public static void main(String[] args)throws Exception {
String s1=nextS(),s2=nextS();
char[] a=s1.toCharArray();
char[] b=s2.toCharArray();
int n=a.length,m=b.length;
int[] next =new int[m];
next[0]=-1;
for(int i=1,j=-1;i<m;i++) {
while(j!=-1&&b[i]!=b[j+1]) j=next[j];
if(b[i]==b[j+1]) j++;
next[i]=j;
}
for(int i=0,j=-1;i<n;i++) {
while(j!=-1&&a[i]!=b[j+1]) j=next[j];
if(a[i]==b[j+1]) j++;
if(j==m-1) {
out.println(i-m+1+1);//
out.flush();
j=next[j];
}
}
for(int i=0;i<m;i++) {
out.print(next[i]+1+" ");
out.flush();
}
}
}