首页 > 其他 > 详细

字符串前缀哈希

时间:2020-04-29 00:44:38      阅读:176      评论:0      收藏:0      [点我收藏+]

字符串前缀哈希

算法思想:

  • 字符串处理利器
  • 核心:把一个字符串转换为一个P进制数字
  • 可以用来快速判断两个子字符串是不是相等
  • 不容忍冲突,不考虑解决冲突,只要取经验值就可以99.99%保证没有冲突
  • Q的取模与存储可以直接用 unsigned long long 溢出就相当于取模

技术分享图片

技术分享图片

技术分享图片

代码实现

const int N=100010,P=131;
char str[N];
typedef unsigned long long ULL;
ULL h[N],p[N];
ULL get(int l,int r)
{
	return h[r]-h[l-1]*p[r-l+1];
}
int main()
{
	int n,m;
	cin>>n>>m>>(str+1);
	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;
		scanf("%d%d%d%d",&l1,&r1,&l2,&r2);
		if(get(l1,r1) == get(l2,r2))	puts("Yes");
		else puts("No");
	}
}

字符串前缀哈希

原文:https://www.cnblogs.com/codertea/p/12798192.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!