概述:

主要用于字符串的匹配。

定义hash函数:

H(c)=(c1bm-1 +c2bm-2 +...+cmb0)mod h

对于字符串c中l-r区间的hash值:

H(l,r)=H(1,r)-H(1,l-1)*br-l+1

如果hash值很大,对h取模,一般地,用unsigned long long 来保存数据,这样溢出时就会自动对264 取模。

如果两个字符串的hash值相等,我们认为它们相同,不排除小概率事件使得两个字符串具有相同的hash值(由取模导致)。

大白书例子:

const ull base=131;
//a在b中是否出现
bool contain(string a,string b)
{int al=a.length(),bl=b.length();if(al>bl)return false;//计算base的al次方ull t=1;for(int i=0;i<al;i++)t*=base;//计算a和b长度为al的前缀对应的hash值ull ah=0,bh=0;for(int i=0;i<al;i++)ah=ah*base+a[i];for(int i=0;i<al;i++)bh=bh*base+b[i];//对b不断的右移一位,更新hash值并判断for(int i=0;i+al<=bl;i++){if(ah==bh)return true;if(i+al<bl)bh=bh*base+b[i+al]-b[i]*t;}return false;
}
//a的后缀和b的前缀相等的最大长度
int overlap(string a,string b)
{int al=a.length(),bl=b.length();int ans=0;ull ah=0,bh=0,t=1;for(int i=1;i<=min(al,bl);i++){ah=ah+a[al-i]*t;bh=bh*base+b[i-1];if(ah==bh)ans=i;t*=base;}return ans;
}

HDU - 4300

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define ull unsigned long long
#define mem(a,b) memset(a,b,sizeof(a))const ull base=131;
int mp[26];
int h(string s)
{int l=s.size();int mn=0;ull ph=0,sh=0,t=1;for(int i=0;i<l/2;i++){ph=ph*base+mp[s[i]-'a'];sh=(s[l-i-1]-'a')*t+sh;if(ph==sh)mn=i+1;t*=base;}for(int i=0;i<l-mn;i++)putchar(s[i]);for(int i=0;i<l-mn;i++)putchar(mp[s[i]-'a']+'a');puts("");
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);int T;string s,t;cin>>T;while(T--){cin>>t>>s;for(int i=0;i<26;i++)mp[t[i]-'a']=i;h(s);}return 0;
}

转载于:https://www.cnblogs.com/widsom/p/8058358.html

算法笔记--字符串hash相关推荐

  1. [算法 笔记]字符串表达式计算(简易版)

    题目:编写一个函数,计算字符串中表达式的值,参数中只包含计算符:+,-,*,/等.例如,str="10+50+2*6/3",result=64. 解析: 考虑算术表达式计算规则: ...

  2. 深圳神牛python培训_请教神牛_字符串hash

    针对字符串hash 我早就听闻可以暴力的干一些事情. 比如 可以... 很多很多 实现O(n)求出 模式串在文本串出现的次数. 但是我不会这什么hash. 我会自然溢出字符串hash 嘿嘿 unsig ...

  3. MySQL按字符串hash分区_MySQL学习笔记(14):分区

    本文更新于2019-06-30,使用MySQL 5.7,操作系统为Deepin 15.4. 分区类型 可以使用SHOW PLUGINS查看是否安装了分区插件. MySQL创建分区表支持使用大部分存储引 ...

  4. 【字符串算法1】 再谈字符串Hash(优雅的暴力)

    [字符串算法1] 字符串Hash(优雅的暴力) [字符串算法2]Manacher算法 [字符串算法3]KMP算法 这里将讲述  [字符串算法1] 字符串Hash 老版原文: RK哈希(Rabin_Ka ...

  5. 数据结构与算法笔记(十五)—— 散列(哈希表)

    一.前沿 1.1.直接寻址表 当关键字的全域U比较小时,直接寻址是一种简单而有效的技术.假设某应用要用到一个动态集合,其中每个元素都有一个取自全域U={0,1,-,m-1)的关键字,此处m是一个不很大 ...

  6. 算法笔记(胡凡)学习笔记@Kaysen

    本文旨在记录算法笔记学习过程中的收获和一些知识点,部分易错知识点只针对个人而言,CCF-CSP考试冲鸭!!! Chapter 2 C/C++快速入门(易错知识点) 2.1 基本数据类型 变量定义注意区 ...

  7. 《算法笔记》学习 入门篇

    目录 <算法笔记>学习 3.1 简单模拟 例1:[PAT B1001]害死人不偿命的(3n+1)猜想 例2:[PAT B1032]挖掘机技术哪家强 3.2 查找元素 例:[codeup 1 ...

  8. 算法笔记知识点整理大全

    每次刷题都觉得自己吃了知识点不全,基础不牢固的亏,刷题的时候目标也不明确,于是看完了算法笔记并把知识点归纳了一下,当然直接看书会更加详细,这个归纳只是学习时加深印象以及方便自己之后回顾而已:之后刷题大 ...

  9. 算法笔记CodeUp第一至第六章刷题记录

    文章目录 <算法笔记>2.2小节--C/C++快速入门->顺序结构 1.例题1-1-1 按要求输出信息(1) 2.例题1-1-2 按要求输出信息(2) 3.例题1-2-1 求两个整数 ...

最新文章

  1. TIMESTAMP 与 explicit_defaults_for_timestamp
  2. 本机连接虚拟机Oracle时报错的解决办法
  3. Angular property binding重复触发的问题讨论
  4. 免插件为WordPress文章中标签添加内链
  5. python编程(virtualenv环境)
  6. mysql 非英文_非英文网站如何使用MySQL的字符集
  7. win10下实现bat转exe
  8. MATLAB中Imcrop函数的用法
  9. [转]仙剑4破解方法详解[图]
  10. OSPF实验———Secondary Address
  11. 如何维持手机电池寿命_教你一招,可以让你的手机电池容量长期维持在峰值,延长电池寿命...
  12. 湍流公式推导系列——(一) 不可压湍动能方程的推导与含义
  13. PHP验证码类庫,php验证码类
  14. qtablewidget翻页禁止_PyQt—QTableWidget实现翻页功能
  15. 高等数学笔记-乐经良老师-第四章-微分中值定理和导数的应用-第二节-洛必达法则
  16. html标签的多级列表,Word小技巧1:利用多级列表功能实现章节标题自动编号
  17. 利用Google地图查询指定IP地址的位置
  18. 我的本科毕业设计--家庭云端智能管家--把思路和技术细节写给大家分享
  19. MyBatis学习从练气到化虚
  20. 将SOP进行到底 (转载)

热门文章

  1. 阿里云中间件团队首次解密企业级分布式应用服务EDAS
  2. 2015-01-14
  3. 数据库备份还原顺序关系(环境:Microsoft SQL Server 2008 R2)
  4. 5/7 SELECT语句:过滤(LIKE使用通配符)
  5. Angularjs 开始之Hello world
  6. 应用的生命周期各个程序运行状态时代理的回调
  7. LeetCode题解之Copy List with Random Pointer
  8. [原创]OpenvSwitch安装
  9. kalman滤波器公式的推导
  10. 又翻出来老电视剧看了看....