字符串hash

记录
23:40 2024-2-5

1. 字符串hash

将字符串转换为hash值。以p=131/13331,将字符串看成P进制数,取一固定值M,求出该P进制数对M的余数,作为该字符的hash值。
可以取M = 264 用 unsigned long long存储这个hash值,这样不用取模,因为如果溢出了就相当于对264取模了

除了在极特殊构造的数据上, 上述 Hash 算法很难产生冲突, 一般情况下上述 Hash算法完全可以出现在题目的标准解答中。

更加细节的知识请参考string hashing字符串哈希

点击查看代码
// s字符串
char s[1000010];
// f 前缀字符串的哈希值 p 131^i
unsigned long long f[1000010], p[1000010];
int n, q;
int main() {
	scanf("%s", s + 1);
	n = strlen(s + 1);
	cin >> q;
	p[0] = 1; // 131^0
	for (int i = 1; i <= n; i++) {
		f[i] = f[i-1] * 131 + (s[i]-'a'+1); // hash of 1~i
		p[i] = p[i-1] * 131; // 131^i
	}
	// hash of [l, r]
	// f[r] - f[l-1] * p[r-l+1]
}

题目记录

leetcode--5. 最长回文子串
POJ--3974 Palindrome

posted @   57one  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示