哈希是字符串的一个东西,比较好用的..可以寻找任意位子的两段是不是相同,相同则哈希值相同..
建议哈希倍数为131,既是131进制数,建议直接unsigned long long作为模数.哈希用途很广的,可以用来排序,求最大回文子串长度...
哈希的存数方法是h[i]=h[i-1]*base+s[i]-'a'+1;//字符串哈希
得到这段哈希值先给大家话一下图罗
下面给大家演示下哈希的实现方法.
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const int base=131,N=1e6+5;
ull b[N],h[N];
char s[N];
int get(int l,int r)
{
return h[r]-h[l-1]*b[r-l+1];
}
int main()
{
scanf("%s",s+1);
h[0]=0;b[0]=1;
int n=strlen(s+1);
for(int i=1;i<=n;i++)
{
b[i]=b[i-1]*base;
h[i]=h[i-1]*base+s[i]-'a'+1;
}
int q,l,r,ll,rr;
cin>>q;
while(q--)
{
cin>>l>>r>>ll>>rr;
if(get(l,r)==get(ll,rr)) puts("Yes");
else puts("No");
}
return 0;
}哈希介绍结束了~很简单一个算法,也很好用

京公网安备 11010502036488号