学习笔记:哈希字符串
第一种方法:自然溢出法。
实例代码:这里prime=233
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
ull h[15],p[15];
char s[15];
int main(){
scanf("%s",s+1);
int len=strlen(s+1);
p[0]=1;
for(int i=1;i<=len;i++)
p[i]=p[i-1]*233,h[i]=h[i-1]*233+s[i];
for(int i=1;i<=len;i++)
printf("h[%d]=%ull\n",i,h[i]);
int l,r;
while(~scanf("%d%d",&l,&r)){
printf("Hash_sub_string: from %d to %d:\n",l,r);
ull hash=h[r]-h[l-1]*p[r-l+1];
printf("%ull\n",hash);
}
return 0;
}
输出结果: