博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法笔记--字符串hash
阅读量:6201 次
发布时间:2019-06-21

本文共 872 字,大约阅读时间需要 2 分钟。

概述:

主要用于字符串的匹配。

定义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

 

代码:

#include
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
>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

你可能感兴趣的文章
深入Java集合系列之四:ConcurrentHashMap
查看>>
集成新版(5.17+)Activiti Modeler与Rest服务
查看>>
MyBatis底层基础和拦截器 - 第一部分
查看>>
Apache Storm 官方文档 —— Storm 集群安装配置
查看>>
【万里征程——Windows App开发】动态磁贴
查看>>
【SpringMVC整合MyBatis】springmvc拦截器-定义和配置
查看>>
CODING 告诉你硅谷项目经理的项目管理之道(2)
查看>>
浏览器网页链接打开本地exe客户端程序
查看>>
基于Smali文件 Android Studio 动态调试 APP
查看>>
使用 Kind 搭建你的本地 Kubernetes 集群
查看>>
前端进阶之什么是BFC?BFC的原理是什么?如何创建BFC?
查看>>
浅聊HTTP缓存 (HTTP Cache)
查看>>
MarkDown 常用语法
查看>>
Android中使用Handler为何造成内存泄漏?
查看>>
MUI使用个推推送流程分析
查看>>
又有MVP新写法了,这次我认为挺不错的。
查看>>
使用promise来实现async
查看>>
ThreadLocal的hash算法(关于 0x61c88647)
查看>>
CGLIB 普通用法
查看>>
基于 webpack4 搭建 vue2、vuex 多页应用框架
查看>>