cp-library

This documentation is automatically generated by competitive-verifier/competitive-verifier

View the Project on GitHub Ebishu-0309/cp-library

:heavy_check_mark: manacher.hpp

Verified with

Code

vector<int> manacher(string s) {
    int n = s.size();
    vector<int> r(n, 1);
    int c = 0;
    for (int i = 0; i < n; ++i) {
        int j = c - (i - c);
        if (i + r[j] < c + r[c]) {
            r[i] = r[j];
        } else {
            int ri = c + r[c] - i;
            while (0 <= i - ri && i + ri < n && s[i - ri] == s[i + ri]) ri++;
            r[i] = ri;
            c = i;
        }
    }
    return r;
}
#line 1 "manacher.hpp"
vector<int> manacher(string s) {
    int n = s.size();
    vector<int> r(n, 1);
    int c = 0;
    for (int i = 0; i < n; ++i) {
        int j = c - (i - c);
        if (i + r[j] < c + r[c]) {
            r[i] = r[j];
        } else {
            int ri = c + r[c] - i;
            while (0 <= i - ri && i + ri < n && s[i - ri] == s[i + ri]) ri++;
            r[i] = ri;
            c = i;
        }
    }
    return r;
}
Back to top page