字符串哈希

假设字符串全部由小写字母组成,给定字符串两个子串位置的开始和结束下标,判断这两个子串是否相等。

思路是这样的:将a-z与1-26对应,将字符串对应于一个特定的整数,现在若要判断两个子串是否相等,只需判断这两个整数是否相等,
如果这两个整数相等,那么这两个字符串有很大概率相等,如果这两个整数不相等,那么这两个子串必不相等。

那么字符串对应的整数是多少呢?如何计算
在这里插入图片描述
这样每个字符串对应的整数就找出来了,这个整数就是哈希值。

一般对于任意一个字符串,需要建立它的所有前缀字符串的哈希值,这样就可以得到这个字符串中任意子串的哈希值。
理解一下这上面,比如对于str=“abcd”,需要建立"a"、“ab”、“abc”、"abcd"这四个子串的哈希值,有了这四个子串的哈希值之后,
这个字符串任意子串的哈希值都可以确定了。
在这里插入图片描述

到这里每个前缀子串对应的哈希值都已经求出来了。
那么中间子串的怎么求呢?比如"bd"?
在这里插入图片描述
这样任意子串的哈希值就都已经求出来了。移位那部分可以用一个数组来表示,就是上篇的p数组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值