哈希表字符串匹配

来源:互联网 发布:淘宝网智能手机 编辑:程序博客网 时间:2024/06/15 22:39
//冲突概率为sqrt(n)#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>#include<algorithm>#define ull unsigned long longusing 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;}

0 1
原创粉丝点击