编程语言
首页 > 编程语言> > 基础算法 841.字符串哈希

基础算法 841.字符串哈希

作者:互联网

也叫字符串前缀哈希法。

例如字符串“ABCDEFGH”。

用h[0], h[1], h[2]......h[n]分别表示前n个字符的子串的哈希值。

将字符串看作为p进制的数字,再将其mod一个数,得到哈希值。

经验上来说,p一般为131,或1331。

mod的数为2^64。unsigned long long如果溢出,就相当于对它取模。

#include<iostream>

using namespace std;

typedef unsigned long long ULL;

const int N = 100010, p = 131;

ULL h[N], n[N];

ULL get(int l, int r){
    return h[r] - h[l - 1] * n[r - l + 1];
}

int main(){
    char str[N];
    int len, m;
    
    scanf("%d%d%s",&len, &m, str + 1);
    
    n[0] = 1;
    
    for(int i = 1; i <= len; i ++ ){
        n[i] = n[i - 1] * p;
        h[i] = h[i - 1] * p + str[i];
    }
    
    while(m -- ){
        int l1, r1, l2, r2;
        scanf("%d%d%d%d",&l1, &r1, &l2, &r2);
        
        if(get(l1, r1) == get(l2, r2)) puts("Yes");
        else puts("No");
    }
    
    return 0;
}

  

标签:哈希,841,int,d%,long,算法,ULL,字符串
来源: https://www.cnblogs.com/bz-2021/p/16244021.html