预处理:
typedef unsigned long long ULL;//将unsinged long long 简写为ULL
base=137;
power[0]=1;//power[i]表示base的i次方
for (int i=1;i<=n;i++) //n为字符串的长度
power=power[i-1]*b; //预处理出base的n次方
求一段字符串的哈希:
ULL ans=0;
for (int i=1;i<=strlen(s);i++) ans=ans*base+(ULL)(s[i]-'A'+1);
ans即为字符串s的哈希值
求一段字符串的前缀哈希:
for (int i=1;i<=strlen(s);i++) ha[i]=ha[i-1]*b+(ULL)(a[i]-'A'+1);
ha[i]存储前i个字符的哈希总值
当要求i~j的哈希值时,直接就是ha[j]-ha[i]*power[j]