首页 > 其他分享 >字符串哈希

字符串哈希

时间:2024-11-29 10:02:47浏览次数:8  
标签:pw int 质数 无脑 哈希 字符串

定义

哈希,是一个十分无脑判断某两端字符串相同的方法(当然为了把保守我们也可以使用pb_ds库里的gb_hash_table)。

我通常使用哈希方法是 \(f(x)=f(x-1)\times b+s_x\) 。

转化成多项式形式那也就是:

\[f(x)=\sum_{i=1}^{x}s_i\times b^{x-i}\pmod p \]

其中 \(b\) 是一个小质数,\(p\) 是大质数(有时候使用unsigned long long自然溢出十分方便,但这是一个非常大众的选择,出题人可能会卡)。

考虑一个预处理:

h[0]=1,pw[0]=1;//pw[i]:表示b^i
for(int i=1;i<=n;i++)
{
    h[i]=(h[i-1]*b+s[i])%mod;
    pw[i]=pw[i-1]*b;
}

判断

上代码解释——

inline int check(int l,int r)//计算一个字符串 s[l,r] 的哈希值
{
    return (h[r]-h[l-1]*pw[r-l+1]+mod)%mod;//使用pw[r-l+1]将多乘的b给消掉
}

技巧

  1. \(b\) 取 \(29\)
  2. 如果实在是害怕被卡,可以写双哈希(就是两个哈希函数判断同时算哈希值)甚至三哈希来保证哈希值的可靠性。
  3. 其实没有什么套路,十分无脑的感觉。

标签:pw,int,质数,无脑,哈希,字符串
From: https://www.cnblogs.com/tyccyt/p/18575898

相关文章

  • javaScript中对字符串操作的方法
    获取字符串长度length属性:可以获取字符串中字符的个数。例如,letstr="hello";console.log(str.length);,会输出 5。访问字符索引访问:可以通过索引(位置)来访问字符串中的单个字符。字符串中的字符索引从 0 开始。例如,letstr="world";console.log(str[0]);,会输出 w。......
  • 泷羽sec-shell编程(2)永久环境变量和字符串显位 学习笔记
      声明!学习视频来自B站up主**泷羽sec**有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页[......
  • 日期字符格式yyyyMMddHHmmss转换字符串或LocalDateTime对象
    日期字符格式yyyyMMddHHmmss转换字符串或LocalDateTime对象字符串yyyyMMddHHmmss转换字符串 格式publicstaticStringstringToDateStringSimpleV2(Stringstr){//使用新的方式转换时间LocalDateTimedate=LocalDateTime.parse(str,DateTimeForma......
  • 字符串篇
    字符串跳-反转字符串我写的代码classSolution{publicvoidreverseString(char[]s){intlen=s.length;chartemp;intleft=0,right=len-1;while(left<right){temp=s[left];s[left]=s......
  • 哈希表篇
    哈希表有效的字母异位词/***242.有效的字母异位词字典解法*时间复杂度O(m+n)空间复杂度O(1)*/classSolution{publicbooleanisAnagram(Strings,Stringt){int[]record=newint[26];for(inti=0;i<s.length();i++){......
  • Day49 | 动态规划 :线性DP 判断子序列&&两个字符串的删除操作
    Day49|动态规划:线性DP判断子序列&&两个字符串的删除操作动态规划应该如何学习?-CSDN博客动态规划学习:1.思考回溯法(深度优先遍历)怎么写注意要画树形结构图2.转成记忆化搜索看哪些地方是重复计算的,怎么用记忆化搜索给顶替掉这些重复计算3.把记忆化搜索翻译成动态规......
  • 简易压缩算法一种字符串压缩表示的解压(Java & Python& JS & C++ & C )
    题目描述有一种简易压缩算法:针对全部为小写英文字母组成的字符串,将其中连续超过两个相同字母的部分压缩为连续个数加该字母其他部分保持原样不变.例如字符串aaabbccccd经过压缩变成字符串3abb4cd请您编写解压函数,根据输入的字符串,判断其是否为合法压缩过的字符串......
  • 五颜六色(字符串)
    题目描述RGB是一种颜色模型,它通过红色、绿色和蓝色的组合来定义颜色。RGB元组由指定每种颜色强度的三个数字组成。因为它对每种颜色使用8位(0或1),所以每个强度可以转换为最多两位的十六进制数。每种颜色有256种可能的色调,因为11111111(或十六进制ff)对应于十进制的......
  • shell(2)永久环境变量和字符串显位
    ​声明!学习视频来自B站up主泷羽sec有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页泷羽se......
  • 基础算法——异或哈希算法 学习笔记
    异或哈希算法思想我们关注一个区间内出现了什么数字。因此,我们对每一个数字赋一个随机权值,然后对这个权值进行一系列操作,例如前缀\(\operatorname{xor}\)等。对于两个序列,通过Hash的方式判断即可。同时,也可用于满足某些条件的子序列数量的问题。我们可以通过Hash的方......