字符串的哈希方式

地址

https://www.acwing.com/problem/content/843/

思想

在这里插入图片描述
R-L+1是字符串的长度
在这里插入图片描述

例题

在这里插入图片描述

代码

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
//p一般取131防止出现冲突。
const int N=1e5+10,p=131;
typedef unsigned long long ULL;
int n,m;
//h[]用来存储前缀的hash值,p[]用来存储p的幂次方
ULL h[N],P[N];
char str[N];
ULL get(int l, int r) {
    
    
    return h[r]-h[l-1]*P[r-l+1];
}
int main(){
    
    
    cin>>n>>m;
    for(int i=1;i<=n;i++){
    
    
        cin>>str[i];
    }
    //初始化h[],P[]
    P[0]=1;
    for(int i=1;i<=n;i++){
    
    
        P[i]=P[i-1]*p;
        h[i]=h[i-1]*p+str[i];
    }
    while(m--){
    
    
        int l1,r1,l2,r2;
        cin>>l1>>r1>>l2>>r2;
        if(get(l1,r1)==get(l2,r2)) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_52934831/article/details/121439827