字符串哈希
- 先来看道题目
一、例题: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种。
计算方法呢,相信也难不倒大家,剩下的交给你们了,代码有空再贴。
觉得我讲的还可以点赞支持,有错误欢迎各位大佬指正。