算法笔记--字符串hash
概述:
主要用于字符串的匹配。
定义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相关推荐
- [算法 笔记]字符串表达式计算(简易版)
题目:编写一个函数,计算字符串中表达式的值,参数中只包含计算符:+,-,*,/等.例如,str="10+50+2*6/3",result=64. 解析: 考虑算术表达式计算规则: ...
- 深圳神牛python培训_请教神牛_字符串hash
针对字符串hash 我早就听闻可以暴力的干一些事情. 比如 可以... 很多很多 实现O(n)求出 模式串在文本串出现的次数. 但是我不会这什么hash. 我会自然溢出字符串hash 嘿嘿 unsig ...
- MySQL按字符串hash分区_MySQL学习笔记(14):分区
本文更新于2019-06-30,使用MySQL 5.7,操作系统为Deepin 15.4. 分区类型 可以使用SHOW PLUGINS查看是否安装了分区插件. MySQL创建分区表支持使用大部分存储引 ...
- 【字符串算法1】 再谈字符串Hash(优雅的暴力)
[字符串算法1] 字符串Hash(优雅的暴力) [字符串算法2]Manacher算法 [字符串算法3]KMP算法 这里将讲述 [字符串算法1] 字符串Hash 老版原文: RK哈希(Rabin_Ka ...
- 数据结构与算法笔记(十五)—— 散列(哈希表)
一.前沿 1.1.直接寻址表 当关键字的全域U比较小时,直接寻址是一种简单而有效的技术.假设某应用要用到一个动态集合,其中每个元素都有一个取自全域U={0,1,-,m-1)的关键字,此处m是一个不很大 ...
- 算法笔记(胡凡)学习笔记@Kaysen
本文旨在记录算法笔记学习过程中的收获和一些知识点,部分易错知识点只针对个人而言,CCF-CSP考试冲鸭!!! Chapter 2 C/C++快速入门(易错知识点) 2.1 基本数据类型 变量定义注意区 ...
- 《算法笔记》学习 入门篇
目录 <算法笔记>学习 3.1 简单模拟 例1:[PAT B1001]害死人不偿命的(3n+1)猜想 例2:[PAT B1032]挖掘机技术哪家强 3.2 查找元素 例:[codeup 1 ...
- 算法笔记知识点整理大全
每次刷题都觉得自己吃了知识点不全,基础不牢固的亏,刷题的时候目标也不明确,于是看完了算法笔记并把知识点归纳了一下,当然直接看书会更加详细,这个归纳只是学习时加深印象以及方便自己之后回顾而已:之后刷题大 ...
- 算法笔记CodeUp第一至第六章刷题记录
文章目录 <算法笔记>2.2小节--C/C++快速入门->顺序结构 1.例题1-1-1 按要求输出信息(1) 2.例题1-1-2 按要求输出信息(2) 3.例题1-2-1 求两个整数 ...
最新文章
- TIMESTAMP 与 explicit_defaults_for_timestamp
- 本机连接虚拟机Oracle时报错的解决办法
- Angular property binding重复触发的问题讨论
- 免插件为WordPress文章中标签添加内链
- python编程(virtualenv环境)
- mysql 非英文_非英文网站如何使用MySQL的字符集
- win10下实现bat转exe
- MATLAB中Imcrop函数的用法
- [转]仙剑4破解方法详解[图]
- OSPF实验———Secondary Address
- 如何维持手机电池寿命_教你一招,可以让你的手机电池容量长期维持在峰值,延长电池寿命...
- 湍流公式推导系列——(一) 不可压湍动能方程的推导与含义
- PHP验证码类庫,php验证码类
- qtablewidget翻页禁止_PyQt—QTableWidget实现翻页功能
- 高等数学笔记-乐经良老师-第四章-微分中值定理和导数的应用-第二节-洛必达法则
- html标签的多级列表,Word小技巧1:利用多级列表功能实现章节标题自动编号
- 利用Google地图查询指定IP地址的位置
- 我的本科毕业设计--家庭云端智能管家--把思路和技术细节写给大家分享
- MyBatis学习从练气到化虚
- 将SOP进行到底 (转载)
热门文章
- 阿里云中间件团队首次解密企业级分布式应用服务EDAS
- 2015-01-14
- 数据库备份还原顺序关系(环境:Microsoft SQL Server 2008 R2)
- 5/7 SELECT语句:过滤(LIKE使用通配符)
- Angularjs 开始之Hello world
- 应用的生命周期各个程序运行状态时代理的回调
- LeetCode题解之Copy List with Random Pointer
- [原创]OpenvSwitch安装
- kalman滤波器公式的推导
- 又翻出来老电视剧看了看....