当前位置: 首页 > news >正文

【字符串】字符串哈希

因为习惯了STL,所以一直没有接触这块儿的内容,今天cf碰到学着用了一下发现还蛮好用的

单哈希

字符串哈希 简单来说就是把一个字符串对应到一个数上,且一个字符串唯一对应一个数,一个数也唯一对应一个字符串

怎么进行这个操作呢?

我们定义一个 base 和一个 mod

字符串 s 1 s 2 s 3 s_1s_2s_3 s1s2s3 就可以表示为 ( s 1 − ′ a ′ ) × b a s e 2 + ( s 2 − ′ a ′ ) × b a s e 1 + ( s 3 − ′ a ′ ) × b a s e 0 (s_1 - 'a')\times base^2+(s_2 - 'a')\times base^1+(s_3 - 'a')\times base^0 (s1a)×base2+(s2a)×base1+(s3a)×base0 (未取模的结果)

base 一般取值 131 1331 13331 (以此类推)

mod 建议取一些奇奇怪怪的值,比如说 1e13+39

通过这个操作把字符串转换成数,之后判断两个字符串是否相等,只需要判断两个数是否相等就可以了

双哈希

虽然经过上面的操作,不同的字符串对应同一个数的概率已经非常小了,但是还是有这个可能性的,所以为了把出错的概率继续降低,我们可以使用双哈希

定义 mod1 mod2 ,让每个字符串对应两个数,只有当两个字符串产生的两个数完全一致时,才判定这两个字符串相等。(依此类推,还可以进行更多次数的哈希降低出错概率)

板子

预处理base的次方

p[0] = 1;
for (int i = 1; i < N; i ++ ) p[i] = p[i - 1] * base % mod1;

将字符串转换成数

int hash_cal(string s)
{int res = 0;for (int i = 0; i < s.size(); i ++ )res = (res * base % mod1 + s[i] - 'a') % mod1;return res;
}

查询

for (int i = 0; i < n; i ++ )
{string s;cin >> s;hash_set[i] = hash_cal(s);
}
sort(hash_set, hash_set + n);
for (int i = 0; i < m; i ++ )
{string s;cin >> s;int tmp = hash_cal(s);if (*lower_bound(hash_set, hash_set + n, tmp) == tmp) cout << "YES\n";else cout << "NO\n";
}

相关文章:

【字符串】字符串哈希

因为习惯了STL&#xff0c;所以一直没有接触这块儿的内容&#xff0c;今天cf碰到学着用了一下发现还蛮好用的 单哈希 字符串哈希 简单来说就是把一个字符串对应到一个数上&#xff0c;且一个字符串唯一对应一个数&#xff0c;一个数也唯一对应一个字符串 怎么进行这个操作呢…...

MacOS快速安装FFmpeg、ffprobe、ffplay

文章目录 一、工具简介二、mac 安装ffprobe、FFmpeg等相关工具2.1 方法一&#xff1a;使用Homebrew安装FFmpeg2.2 从官网下载FFmpeg安装包&#xff0c;源码安装2.3 macOS 无法验证开发者时安装 一、工具简介 这些工具都是与多媒体处理和流媒体相关的开源工具&#xff0c;它们都…...

数据结构 之 树习题 力扣oj(附加思路版)

层序遍历 算法流程: 1&#xff0e;创建一个队列记为que,将根节点放入队列。 2.每次从队列中弹出一个节点&#xff0c;记为node。 3.第三步看这个node有没有左孩子&#xff0c;如果有左孩子把左孩子放入到队列中&#xff0c;如果node有右孩子&#xff0c;把右孩子放入到队列中。…...

闭包学习,闭包和高阶函数

面试官反复在前端面试中提出闭包相关的问题&#xff0c;并要求提供代码示例&#xff0c;主要是为了考察以下几点&#xff1a; 1.概念&#xff1a;考察候选人是否真正理解闭包是如何形成的&#xff0c;即当一个函数可以访问并操作其外部作用域中的变量&#xff0c;即使在其外部…...

Linux实战笔记(五) shell

大家好&#xff0c;我是半虹&#xff0c;这篇文章我们介绍一下 shell 1、Shell Shell 通常泛指系统提供给用户的操作界面&#xff0c;是系统内核与用户之间的连接 Shell 这个名字其实还挺形象的&#xff0c;中文翻译是壳&#xff0c;什么的壳呢&#xff0c;自然是系统内核的壳…...

TCP Wrappers 的使用

以ssh为例&#xff0c;每当有ssh的连接请求时&#xff0c;先读取系统管理员所设置的访问控制文件&#xff0c;符合要求&#xff0c;则会把这次连接原封不 动的转给ssh进程&#xff0c;由ssh完成后续工作&#xff1b;如果这次连接发起的ip不符合访问控制文件中的设置&#xff0c…...

数据结构——lesson11排序之快速排序

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…...

Nacos部署(二)Linux部署Nacos2.3.x集群环境

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; Nacos部署&#xff08;二&#xff09;Linux部署Nacos2.3.x集群环境 ⏱️…...

RuoYi 自定义字典列表页面编码翻译

“字典数据”单独维护&#xff0c;而不是使用系统自带的字典表&#xff0c;应该如何使用这样的字典信息呢&#xff1f; 系统字典的使用&#xff0c;请参考&#xff1a; 《RuoYi列表页面字典翻译的实现》 https://blog.csdn.net/lxyoucan/article/details/136877238 需求说明…...

GAMES101 学习4

材质和外观 材质 BRDF 漫反射 任何方向的光进来都会被均匀的反射到周围各个不同的方向上去 假设能量守恒&#xff0c;那么 Li Lo&#xff0c;这之后BRDF就 &#xff0c;就可以定义一个反照率 &#xff08;Albeo&#xff09; - &#xff0c;在&#xff08;0 - 1&#xff0…...

Redis中的缓存穿透

缓存穿透 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;导致这些请求直接到了数据库上&#xff0c;对数据库造成了巨大的压力&#xff0c;可能造成数据库宕机。 常见的解决方案&#xff1a; 1&#xff09;缓存无效 key 如果缓存和数据库中都查不到某…...

javaSwing超市收银(txt)

一、简介 超市收银系统是商店管理的重要组成部分&#xff0c;它可以帮助商家高效地进行商品管理、销售记录和结算。本文将介绍如何使用Java Swing开发一个简单的超市收银系统&#xff0c;包括基本功能如登录、修改商品信息、结算等&#xff0c;并利用txt文本作为数据库存储商品…...

Linux 理解文件系统、磁盘结构、软硬链接

目录 一、理解磁盘结构 1、磁盘的物理结构 2、硬件层面理解 3、磁盘的具体物理存储结构 4、进行逻辑抽象 5、磁盘文件的管理 6、创建新文件的过程 二、理解文件系统 1、文件的构成 2、为何选择4KB而非512字节作为基本单位? 3、文件系统的组成 数据块&#xff08;Data Blocks&a…...

智慧商场数字化创新需要有数字能力帮手

商场和商圈是是促进流通创新、培育新兴消费的载体。很多实体店为适应消费升级需求新变化&#xff0c;加快运用现代信息技术&#xff0c;建设智慧商店&#xff0c;创新消费场景。蚓链运用现代信息技术&#xff08;互联网、物联网、5G、大数据、人工智能、云计算等&#xff09;&a…...

JS加密解密之应用如何保存到桌面书签

前言 事情起因是这样的&#xff0c;有个客户解密了一个js&#xff0c;然后又看不懂里边的一些逻辑&#xff0c;想知道它是如何自动拉起谷歌浏览器和如何保存应用到书签的&#xff0c;以及如何下载应用的。继而诞生了这篇文章&#xff0c;讲解一下他的基本原理。 渐进式Web应用…...

线上linux服务器升级nginx

一个nginx版本空包 一个pcre文件 一个zlib文件 ./configure配置文件 make编译 make install复制所有文件到nginx 如果nginx -v无版本号 检查环境变量cat /etc/profile 编辑 环境变量vi /etc/profile 按i进入编辑模式 按esc进入查看模式 因为path中并未使用%JAVA_HOME%字样…...

使用JDK提供的常用工具在多线程编写线程安全和数据同步的程序

题图来自APOD 你好&#xff0c;这里是codetrend专栏“高并发编程基础”。 引言 在并发执行任务时&#xff0c;由于资源共享的存在&#xff0c;线程安全成为一个需要考虑的问题。与串行化程序相比&#xff0c;并发执行可以更好地利用CPU计算能力&#xff0c;提高系统的吞吐量…...

八道Python入门级题目及答案详解

前言 介绍Python作为一门流行的编程语言&#xff0c;易学易用的特点。强调通过练习题目来加深对Python语法和编程概念的理解。 题目一&#xff1a;计算两个数的和 描述&#xff1a;编写一个Python程序&#xff0c;计算两个数的和&#xff0c;并输出结果。举例&#xff1a;输…...

Git 的cherry-pick含义

目录 1. cherry-pick的基本概念 2. cherry-pick的使用场景 3. cherry-pick的使用方法 结论 1. cherry-pick的基本概念 git cherry-pick是一个Git命令&#xff0c;它允许你选择一个或多个其他分支上的提交&#xff08;commits&#xff09;&#xff0c;并将它们复制到你当前的…...

大数据中TopK问题

1.给定100个int数字&#xff0c;在其中找出最大的10个; import java.util.PriorityQueue;public class Main {public static void main(String[] args) {final int topK 3;int[] vec {4, 1, 5, 8, 7, 2, 3, 0, 6, 9};PriorityQueue<Integer> pq new PriorityQueue<…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

【若依】框架项目部署笔记

参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作&#xff1a; 压缩包下载&#xff1a;http://download.redis.io/releases 1. 上传压缩包&#xff0c;并进入压缩包所在目录&#xff0c;解压到目标…...

如何通过git命令查看项目连接的仓库地址?

要通过 Git 命令查看项目连接的仓库地址&#xff0c;您可以使用以下几种方法&#xff1a; 1. 查看所有远程仓库地址 使用 git remote -v 命令&#xff0c;它会显示项目中配置的所有远程仓库及其对应的 URL&#xff1a; git remote -v输出示例&#xff1a; origin https://…...