Skip to content
z函数

z函数 ​

c++
std::vector<int> zArray(const std::string& s) {
    int n = s.size();
    std::vector<int> z(n, 0);
    for (int i = 1, c = 0, r = 0; i < n; ++i) {
        int len = (r > i) ? std::min(r - i, z[i - c]) : 0;
        while (i + len < n && s[i + len] == s[len]) ++len;
        if (i + len > r) {
            r = i + len;
            c = i;
        }
        z[i] = len;
    }
    return z;
}