import java.util.Scanner;
public class Main {
public static int[] getNextArray(char[] t) {
int len = t.length;
int[] next = new int[len + 1];
int i = 0, j = -1;
next[0] = -1;
while (i < len) {
if (j == -1 || t[i] == t[j]) {
next[++i] = ++j;
} else
j = next[j];
}
return next;
}
public static int kmpMatch(String s, String t) {
char[] s_arr = s.toCharArray();
char[] t_arr = t.toCharArray();
int[] next = getNextArray(t_arr);
int lens = s.length();
int lent = t.length();
int i = 0, j = 0;
while (i < lens && j < lent) {
if (j == -1 || s_arr[i] == t_arr[j]) {
j++;
i++;
} else
j = next[j];
if (j == lent) {
System.out.println(i - j + 1);
j = next[j];
}
}
for (i = 1; i <= lent; i++)
System.out.print(next[i] + " ");
return 1;
}
public static void main(String[] args) {
String s,t;
Scanner cin = new Scanner(System.in);
s=cin.next();
t=cin.next();
kmpMatch(s,t);
}
}
11和13个测试点都是1.2S
因为准备java赛道所以要改板子,从cpp移植过来发现炸了,求助各位带哥Orz