[模板]-字符串哈希

来源:互联网 发布:淘宝怎么打折促销 编辑:程序博客网 时间:2024/05/21 20:10

问题描述:
给定N个字符串(第i个字符串长度为Mi,字符串内包含数字、大小写字母,大小写敏感),请求出N个字符串中共有多少个不同的字符串。
代码:

char s[10010][1500];set<long long>se;//集合long long BKDR(char s[])//AC{    long long ans = 0;    int len = strlen(s);    for(int i = 0; i <= len - 1; ++i)    {        ans = ans * 31 + s[i];    }    return (ans & 0x7FFFFFFF);}long long ELF(char s[])//AC{    long long ans = 0,x = 0;    int len = strlen(s);    for(int i = 0; i <= len - 1; ++i)    {        ans = (ans << 4) + s[i];        if((x = ans & 0xF0000000L) != 0)        {            ans ^= (x >> 24);            ans &= ~x;        }    }    return (ans & 0x7FFFFFFF);}long long SDBM(char s[])//WA一个点{    long long ans = 0;    int len = strlen(s);    for(int i = 0; i <= len - 1; ++i)        ans = s[i] + (ans << 6) + (ans << 16) - ans;    return (ans & 0x7FFFFFFF);}int main(){    int n;    cin >> n;    for(int i = 1; i <= n; ++i)    {        scanf("%s",s[i]);//输入        se.insert(SDBM(s[i]));//将哈希值加入集合    }    printf("%d\n",se.size());//输出集合中元素的个数    return 0;}
原创粉丝点击