int n = s.length();
int[] p = new int[n + 1];
p[0] = -1;
for (int i = 0; i < n; i++) {
int k = p[i];
char c = s.charAt(i);
while ((k >= 0) && (s.charAt(k) != c)) {
k = p[k];
}
p[i + 1] = k + 1;
}
p = [-1]
k = -1
for c in s:
while k >= 0 and s[k] != c:
k = p[k]
k += 1
p.append(k)
Comments