Может кто-нибудь объяснить, пожалуйста, об этом коде? - PullRequest
0 голосов
/ 28 апреля 2020

Я не могу понять эту строку кода. Может кто-нибудь объяснить, пожалуйста?

int count_unique_substrings(string const& s) {
    int n = s.size();
    const int p = 31;
    const int m = 1e9 + 9;
    vector<long long> p_pow(n);
    p_pow[0] = 1;
    for (int i = 1; i < n; i++)
        p_pow[i] = (p_pow[i-1] * p) % m;

    vector<long long> h(n + 1, 0);
    for (int i = 0; i < n; i++)
        h[i+1] = (h[i] + (s[i] - 'a' + 1) * p_pow[i]) % m;

    int cnt = 0;
    for (int l = 1; l <= n; l++) {
        set<long long> hs;
        for (int i = 0; i <= n - l; i++) {
            long long cur_h = (h[i + l] + m - h[i]) % m;
            cur_h = (cur_h * p_pow[n-i-1]) % m;// *** I am not understanding this line***
            hs.insert(cur_h);
        }
        cnt += hs.size();
    }
    return cnt;
}

На самом деле это из: Cp алгоритмов и topi c было Определить количество различных подстрок в строке. Может кто-нибудь объяснить, пожалуйста?

...