首页 > 其他分享 >哈希

哈希

时间:2022-08-25 09:01:02浏览次数:39  
标签:int s2 sum 哈希 字符串 s1

哈希


字符串哈希

分析

定义一个进制b,b必须大于字符数且为素数(玄学吧) 。然后将字符串的每位字符的ascii码当做进制的方法一样算成一个数。

想一下我们如何求出二进制中每位的数字?除一下存入数组,再模一下,知道数为 0 。 字符串哈希也是这个思路:要求一个字符串在另一个长字符串中出现的次数,那就求出这个字符串的哈希数 h 。然后在长字符串中遍历,如果字符长度相同,并且哈希数相同,那么ans++。

这个大字符串的求法即为(m为字符串位数,c3为ascii码)

\[H(C)=(c_1b^{m-1}+c_2b^{m-2}+…+c_mb^0) \]

长字符串的哈希值可以用前缀和的思想来处理。

\[sum[i]=sum[i-1]*b+s2[i]-'A'+1; \]

遍历的时候像前缀和一样O(N)解决

\[H(C')=H(c,k+n)-H(C,K)*b^n \]

#include<iostream>
using namespace std;

typedef unsigned long long Ull;
#define N 1000010
#define M 10010

int T,n,b=31,ans;
char s1[M],s2[N];

Ull h,sum[N],power[N];

int main(){
	power[0]=1;
	for(int i=1;i<=N;i++){
		power[i]=power[i-1]*b;
	}
	cin>>T;
	while(T--){
		cin>>s1+1>>s2+1;
		h=0;
		int l1=strlen(s1+1);
		int l2=strlen(s2+1);
		for(int i=1;i<=l1;i++)
			h=h*b+s1[i]-'A'+1;
		sum[0]=0;
		for(int i=1;i<=l2;i++)
			sum[i]=sum[i-1]*b+s2[i]-'A'+1;
		ans=0;
		for(int i=0;i<=l2-l1;i++){
			if(sum[i+l1]-sum[i]*power[l1]==h)
				ans++;
		}
		cout<<ans<<endl;
	}
	return 0;
}

2022-5-8 21:09:20

标签:int,s2,sum,哈希,字符串,s1
From: https://www.cnblogs.com/huaziqi/p/16623045.html

相关文章

  • 集合询问(哈希)
    题意题目链接:https://www.acwing.com/problem/content/4607/数据范围\(1\leqt\leq10^5\)\(0\leqx<10^{18}\)\(1\leq|s|\leq18\)思路该题的关键在于如......
  • 哈希函数的构造方法
    https://www.cnblogs.com/gj-Acit/archive/2013/05/06/3062628.html哈希函数的构造方法 哈希函数的构造方法本文阐述了哈希函数的构造方法有很多,但应注意两个原则:......
  • UVA11019 Matrix Matcher【二维哈希】
    ThetreeshaveshedtheirleafyclothingandtheircolorshavefadedtograysandbrownsIsawamillionsoftreesalldustedwithsnowjustlikeoutofafai......
  • 一致性哈希算法
    一致性哈希算法主要应用于Redis分布式缓存问题引出在单节点的情况下,Redis缓存不用担心命中率的问题,但是一旦上升到分布式的架构中,可能会造成一台机器有缓存而另一台机器......
  • 【2022牛客多校】第五场 Crazy Thursday 二分+字符串哈希
    https://ac.nowcoder.com/acm/contest/33190/G题意给你一个长为n的字符串s,求s中分别以'k'、'f'、'c'结尾的回文串数量\(n<=5e5\)思路首先暴力枚举区间端点加判断,为......
  • codeforces963D. Frequency of String【哈希】
    我的腿让我停下,可是我的心却不许我这么做今天又是为了明知多半不可能的事情奔波一早,一天里,出了很多丑,犯了很多错,见了很多人,有了很多意想不到的收获,我选择了我的生存方式......
  • 哈希
    字符串哈希哈希是一种高效判断字符串相等的算法,准确来说是子串,因为预处理需要\(O(n)\),自然是多次使用才划算常见的哈希式是\(\suma_ibase^i(mod\mod)\)即选取一个......
  • 哈希类型,列表类型,集合类型,有序集合类型,慢查询,pipline与事务,发布订阅,Bitmap,HyperLogLog
    1API的使用1.1哈希类型###1---hget,hset,hdelhgetkeyfield#获取hashkey对应的field的value时间复杂度为o(1)hsetkeyfieldvalue#设置hashkey对应的field......
  • 哈希表4:两数之和(1)
    本题如下:(链接:https://leetcode.cn/problems/two-sum/)题目:给定一个整数数组nums 和一个整数目标值target,请你在该数组中找出和为目标值target 的那 两个 整数,并返......
  • Redis---hash哈希散列
    1.前言Redishash(哈希散列)是由字符类型的field(字段)和value组成的哈希映射表结构(也称散列表),它非常类似于表格结构。在hash类型中,field与value一一对应,且不允许重......