#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<set>
using namespace std;
#define MAXN 100001
typedef unsigned long long ull;
const ull seed=31;
ull seeds[MAXN];
char s[MAXN],s2[MAXN];
int poss[MAXN];
//暴力字符串比较
bool Strcmp(const char a[],const int &L1,const int &R1,
const char b[],const int &L2,const int &R2)
{
for(int i=L1,j=L2;i<R1;++i,++j)
if(a[i]!=b[j])
return 0;
return 1;
}
//自然上溢,L首指针,R尾指针,左闭右开
ull BKDRhash(const char str[],const int &L,const int &R)
{
ull res=0;
for(int i=L;i<R;++i)
res=res*seed+str[i];
return res;
}
//预处理,便于hash(s[i...i+m-1]和hash(s[i+1...i+m]之间的转移)
void init_seeds()
{
seeds[0]=1;
for(int i=1;i<MAXN;++i)
seeds[i]=seeds[i-1]*seed;
}
//文本串查找,s文本串,sub子串
int RabinKarp(const char s[],const char sub[])
{
int n=strlen(s),m=strlen(sub);
ull hsub=BKDRhash(sub,0,m),hs=BKDRhash(s,0,m);
for(int i=0;i<=n-m;++i)
{
if(hs==hsub && Strcmp(s,i,i+m,sub,0,m))
return i;
hs=(hs-s[i]*seeds[m-1])*seed+s[i+m];//O(1)转移
}
return -1;
}
int main()
{
init_seeds();
while(1)
{
scanf("%s%s",s,s2);
printf("%d\n",RabinKarp(s,s2));
}
return 0;
}

【字符串哈希】【BKDRhash】【Rabin-Karp算法】模板的更多相关文章

  1. BKDR字符串哈希

    BKDR字符串哈希 bkdrhash冲突的可能性非常小,但是由于\(hash\)值非常大不能映射到哈希数组地址上,所以可以通过取余,用余数作为索引地址.但这样做造成了可能的地址冲突. #include ...

  2. 洛谷 P3370 【模板】字符串哈希

    洛谷 P3370 [模板]字符串哈希 题目描述 如题,给定N个字符串(第i个字符串长度为Mi,字符串内包含数字.大小写字母,大小写敏感),请求出N个字符串中共有多少个不同的字符串. 友情提醒:如果真的 ...

  3. 洛谷P3370 【模板】字符串哈希

    P3370 [模板]字符串哈希 143通过 483提交 题目提供者HansBug 标签 难度普及- 提交  讨论  题解 最新讨论 看不出来,这题哪里是哈希了- 题目描述 如题,给定N个字符串(第i个 ...

  4. 洛谷 P3370 字符串哈希 (模板)

    <题目链接> <转载于 >>>  > 题目描述 如题,给定N个字符串(第i个字符串长度为Mi,字符串内包含数字.大小写字母,大小写敏感),请求出N个字符串中共 ...

  5. 字符串哈希算法(以ELFHash详解)

    更多字符串哈希算法请参考:http://blog.csdn.net/AlburtHoffman/article/details/19641123 先来了解一下何为哈希: 哈希表是根据设定的哈希函数H( ...

  6. ELFhash - 优秀的字符串哈希算法

    ELFhash - 优秀的字符串哈希算法 2016年10月29日 22:12:37 阅读数:6440更多 个人分类: 算法杂论算法精讲数据结构 所属专栏: 算法与数据结构   版权声明:本文为博主原创 ...

  7. 洛谷—— P3370 【模板】字符串哈希

    P3370 [模板]字符串哈希 题目描述 如题,给定N个字符串(第i个字符串长度为Mi,字符串内包含数字.大小写字母,大小写敏感),请求出N个字符串中共有多少个不同的字符串. 友情提醒:如果真的想好好 ...

  8. 【基本算法入门-字符串哈希(Hash)】-C++

    字符串哈希入门 说得通俗一点,字符串哈希实质上就是把每个不同的字符串转成不同的整数. 为什么会有这样的需要呢?很明显,存储一个超长的字符串和存储一个超大但是能存的下的整数,后者所占的空间会少的多,但主 ...

  9. 洛谷 P3370 【模板】字符串哈希 (set||map||哈希||字典树(mle)

    P3370 [模板]字符串哈希 题目描述 如题,给定N个字符串(第i个字符串长度为Mi,字符串内包含数字.大小写字母,大小写敏感),请求出N个字符串中共有多少个不同的字符串. #友情提醒:如果真的想好 ...

  10. AC日记——【模板】字符串哈希 洛谷 3370

    题目描述 如题,给定N个字符串(第i个字符串长度为Mi,字符串内包含数字.大小写字母,大小写敏感),请求出N个字符串中共有多少个不同的字符串. 友情提醒:如果真的想好好练习哈希的话,请自觉,否则请右转 ...

随机推荐

  1. Codeforces Round #478 C. Valhalla Siege

    C. Valhalla Siege time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  2. tyvj1305 最大子序和(单调队列

    题目地址:http://www.joyoi.cn/problem/tyvj-1305 最大子序和 题目限制 时间限制 内存限制 评测方式 题目来源 1000ms 131072KiB 标准比较器 Loc ...

  3. .NET之特性和属性(转)

    1. 引言 attribute是.NET框架引入的有一技术亮点,因此我们有必要花点时间走进一个发现attribute登堂入室的入口.因为.NET Framework中使用了大量的定制特性来完成代码约定 ...

  4. springmvc4+hibernate4+activiti5.18(Maven)

    项目下载地址: http://files.cnblogs.com/files/walk-the-Line/springmvc_activiti5.18_hibernate4.zip

  5. struts2和jstl有关循环的写法

    一:前言 其实觉得自己现在就是个码农啊,对于struts2的标签和jstl的标签我一直都是只会用,但是觉得自己老是会混淆这种概念性的问题.所以我自己在代码里面就试着用了几种方式,实现同一种效果,下面就 ...

  6. Tomcat部署时war和war exploded区别及验证

    war和war exploded的区别 在使用IDEA开发项目的时候,部署Tomcat的时候通常会出现下边的情况: 是选择war还是war exploded 这里首先看一下他们两个的区别: war模式 ...

  7. 【uva11855-求长度为1到n的相同子串出现的次数】sam

    题意:求长度为1到n的相同子串出现的次数,输到小于2为止. 题解: 用sam做. 建机,算right集合,然后用r[i]更新长度为step[i]的子串出现次数,然后ans[i]=maxx(ans[i] ...

  8. 【hdu2825-Wireless Password】AC自动机+DP

    http://acm.hust.edu.cn/vjudge/problem/16883 题意:要构造一个长度为n的字符串,然后有m模板串构成一个集合(m<=10),构造出来的字符串至少含有k种模 ...

  9. 原生sql和django的事务控制

    def test(request): with connections['default'].cursor() as c: try: with transaction.atomic(using='de ...

  10. 【POI2017||bzoj4726】Sabota?

    上学期putsnan过了一次,这学期认真写了一遍…… #include<bits/stdc++.h> #define N 500010 using namespace std; ]; ,n ...