• 知识整理:字符串hash


    字符串hash唯一用途是快速判断两字符串是否相等,但存在极小概率假阳性(本来不相等,但算法返回相等)。

    根本思想是把一个字符串转换为一个整数,要求相同的字符串,对应的这个整数相同,不同的字符串,对应的这个整数不同。

    #include<bits/stdc++.h>
    #define BASE 2
    #define MOD 1000000007
    #define LL long long
    #define MAXN 300005
    using namespace std;
    int hash[MAXN];
    char s[MAXN];
    int qpow(int base,int n){
        LL ans=1;
        while(n){
            if(n&1)ans=(ans*base)%MOD;
            base=(1LL*base*base)%MOD;
            n>>=1;
        }
        return ans;
    }
    int hash_ask(int l,int r){
        if(l==0)return hash[r];
        else{
            int ans=(1LL*hash[r]-hash[l-1]+MOD)%MOD;
            int rev=qpow(BASE,l);
            rev=qpow(rev,MOD-2);
            ans=1LL*ans*rev%MOD;
            return ans;
        }
    }
    int hash_init(int len){
        hash[0]=s[0];
        for(int i=1;i<len;i++){
            hash[i]=(0LL+hash[i-1]+s[i]*qpow(BASE,i)%MOD)%MOD;
        }
    }
    
    int main(){
        scanf("%s",s);
        hash_init(strlen(s));
        while(1){
            int l,r;
            scanf("%d %d",&l,&r);
            printf("%d
    ",hash_ask(l,r));
        } 
    }
  • 相关阅读:
    C#中yield return用法
    vs生成命令和属性的宏
    开源的库RestSharp轻松消费Restful Service
    【C#】工具类-FTP操作封装类FTPHelper
    常见编码bug
    用Redis存储Tomcat集群的Session(转载)
    session转载
    pv,uv
    cookie读取设置name
    转载cookie理解
  • 原文地址:https://www.cnblogs.com/isakovsky/p/11372791.html
Copyright © 2020-2023  润新知