字符串哈希入门

字符串哈希

  • 先来看道题目

一、例题:P3370 【模板】字符串哈希
链接: https://www.luogu.org/problemnew/show/P3370.
众所周知,哈希就是一个映射(如果你不知道,请去补课)。

同样啊,字符串哈希就是字符串与数字之间的映射。

那么他是怎么映射的呢?(建议思考一分钟)

好吧,我揭晓答案了:将一个字符串转化为一个数字。

诶?你可能会问了,这个数字是怎么定义的,或者说是,它们的关联性是什么?

别急,正式开始。(马上你就知道我为什么要叫你思考一分钟了)

十六进制相信大家都会,那么我们的字符串哈希就和16进制差不多是一个东西,只不过我们的进制也许不一样而已。

比如我有一个字符串
‘’’
s=“abcd”,先定义一下各个字符的数字映射。
这里a=1,b=2,c=3,d=4,我们将它转化为5进制吧,随便都行。(但是千万不能比数字中的最大值小,比如这里最大值是4,你的进制起码得是5,为什么?自己想想就明白了)

那么"abcd"这个字符串他的哈希值就是(按权结合计算,相信大家都会)

比如这里,有:1×5³+2×5²+3×5¹+4×5⁰
那么如果我改变了字符串中字母的顺序
比如为"acdb",那么他的哈希值是不是就截然不同了。

那么从中我们学习到的,就是将字符串转为一个个独立的数字,因为计算机处理字符都是将它转为数字处理的对不对(有没有恍然大悟:我靠,我刚刚怎么没想到)

这样的话,对于开头贴出来的题。
我们就可以将一个个字符串化为一个个数字,

比如啊,比如。
有5个字符串,化成了 5 4 3 3 4
我们的目的是不是找出有多少个不同的字符串,也就是找出有多少种数字。 显然这里是3种。

计算方法呢,相信也难不倒大家,剩下的交给你们了,代码有空再贴。

觉得我讲的还可以点赞支持,有错误欢迎各位大佬指正。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值