Skip to content
Rain Hu's Workspace
Go back

[LeetCode] 2156. Find Substring With Given Hash Value

Rain Hu
class Solution {
public:
    string subStrHash(string s, int p, int mod, int k, int val) {
        int n = s.size();
        long pk = 1, curr = 0;
        for (int i = 0; i < k; i++) {
            curr = (curr * p + (s[n-1-i]-'a'+1)) % mod;
            pk = (pk * p) % mod;
        }
        int j = n-k;
        for (int i = k; i < n; i++) {
            curr = (curr * p + (s[n-1-i]-'a'+1) + mod - ((s[n-1-i+k]-'a'+1) * pk) % mod) % mod;
            if (curr == val) j = n-1-i;
        }
        return s.substr(j, k);
    }
};

Share this post on:

Previous
[LeetCode] 2136. Earliest Possible Day of Full Bloom
Next
[LeetCode] 18. 4Sum