0
点赞
收藏
分享

微信扫一扫

[倒序滑动窗口]leetcode2156:查找给定哈希值的子串(medium)

题目:
在这里插入图片描述
在这里插入图片描述


题解:


代码如下:

using LL = long long;
class Solution {
public:
    string subStrHash(string s, int pow, int mod, int k, int val) {
        int n=s.size();
        // p用来保存pow^k的
        LL hash=0,p=1;
        for(int i=n-1;i>=n-k;i--){
            hash=(hash*pow+int(s[i]&31))%mod;
            p=p*pow%mod;
        }
        int pos=0;
        if(hash==val)pos=n-k;
        for(int i=n-k-1;i>=0;i--){
            // hashNow先左移一位,然后加上s[new]+mod,然后减去s[old]*pow^k
            // hashNext=hashNow*pow+s[new]+mod-s[old]*pow^k
            hash=(hash*pow+int(s[i]&0x1f)+mod-p*int(s[i+k]&0x1f)%mod)%mod;
            if(hash==val)pos=i;
        }
        return s.substr(pos,k);
    }
};
举报

相关推荐

0 条评论