字符串哈希

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

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

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

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

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