字符串哈希

字符串哈希首先需要预处理出来所有字符串前缀的哈希值

eg:str1="abcde"

h[0]=0,h[1]="a",h[2]="ab",h[3]="abc",.......(注意此处并不是等于这些字符串,而是等于这些字符串的哈希值

我们将每个字符串看成是一个p进制的数,字符串中的每一个字符就是p进制下的每一位上的数字,在这里我们暂且设a=1,b=2....,那么h[3]=1*p^2+2*p^1+3*p^0,通过这种方式可以将字符串转化成一个数字,而转化成的数字通常会比较大,所以一般需要模上一个比较小的数,这样就可以把所有字符串映射到0-mod-1中的一个数

注意:

1、不能将某一个字符映射成0,这样会导致多个映射成0的字符组成的字符串也为0

2、一般,p取131或者13331,mod取2^64,而unsigned的最大范围为0-2^64-1,所以直接开ull的话,溢出就相当于取模了

通过预处理出来的所有字符串前缀的哈希值,可以得到任意子串的哈希值,例如我们要得到h[l]-h[r]的哈希值,我们可以通过h[r],h[l-1]得到,结果为h[r]-h[l-1]*p^(r-l+1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值