This documentation is automatically generated by online-judge-tools/verification-helper
#include "src/string/zalgo.hpp"
#pragma once
// s[0..r[i]] == s[i..i+r[i]]
template <class S> V<int> z_algo(const S& s) {
int n = int(s.size());
V<int> r(n + 1);
r[0] = 0;
for (int i = 1, j = 0; i <= n; i++) {
int& k = r[i];
k = (j + r[j] <= i) ? 0 : min(j + r[j] - i, r[i - j]);
while (i + k < n && s[k] == s[i + k]) k++;
if (j + r[j] < i + r[i]) j = i;
}
r[0] = n;
return r;
}
#line 2 "src/string/zalgo.hpp"
// s[0..r[i]] == s[i..i+r[i]]
template <class S> V<int> z_algo(const S& s) {
int n = int(s.size());
V<int> r(n + 1);
r[0] = 0;
for (int i = 1, j = 0; i <= n; i++) {
int& k = r[i];
k = (j + r[j] <= i) ? 0 : min(j + r[j] - i, r[i - j]);
while (i + k < n && s[k] == s[i + k]) k++;
if (j + r[j] < i + r[i]) j = i;
}
r[0] = n;
return r;
}