//冲突概率为sqrt(n)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define ull unsigned long long
using namespace std;
const ull B=1e8+7;
const int dmax=101000;
char s[dmax],s1[dmax];
int hash(char *a,char *b){
ull x=strlen(a),y=strlen(b),al=0,bl=0,t=1;
if (x>y)
return -1;
for (int i=0;i<x;i++){
t*=B;
al=al*B+a[i];
bl=bl*B+b[i];
}
for (int i=0;i<=y-x;i++){
if (al==bl)
return i;
if (i<y-x)
bl=bl*B-s[i]*t+s[i+x];
}
return -1;
}
int main(){
gets(s1);
gets(s);
printf("%d\n",hash(s1,s));
return 0;
}
哈希表字符串匹配
最新推荐文章于 2023-04-01 23:04:27 发布