字符串查找之 hash法 + 前缀和
一、缘起
昨晚被学弟拉去打比赛,没能给同研习组的兄弟们做ppt报告题目。就在这里为大家介绍另一个字符串查找的方法吧。
二、前言
1、关于trie
我们都知道trie是hash树的一种,所以显而易见的,很多能用trie解决的问题,也可以用hash法加上前缀和来解决。
2、为什么要使用hash法
虽然时间效率上不如trie,但是代码简洁易懂,所以在两种方法都可以使用时,我推荐大家可以直接用hash法。
三、介绍
1、hash
①hash的简单定义
所谓字符串hash,就是用一个特定的函数给每个字符串算出一个hash数值,尽可能使得每一个hash数值都不一样。
②hash的求法
a.把字串当成数
比较直觉的是,我们可以把只包含小写字母的字串当作是一个base=27的数。
例如:令a,b,c,d……x,y,z依次代表1,2,3,4……25,26,27
'abcd' = a*1000+b*100+c*10+d //注意这里的1000 100 10 都是27进制的数
。
也可以写成 'abcd' = a*base^3+b*base^2+c*base^1+d
我们可以通过简单的计算把字符串和数值一对一对应。