字符串哈希

来源:互联网 发布:个人网站博客系统php 编辑:程序博客网 时间:2024/06/05 15:40

参照算法笔记P109,甲级1039


先假设字符串均由大写字母A~Z构成。在这个基础上,不妨把A~Z视为0~25,这样就把26个大写字母对应到了26进制中。接着,按照将26进制转化为10进制的思路,由进制的转换结论可知,在进制转换过程中,得到的10进制肯定是唯一的,由此便可实现将字符串映射为整数的需求(注意:转换成的最大整数位(int)(pow(26,len)-1),len为字符串长度)

int hash(char s[],int len){int id=0,i;for(i=0;i<len;i++){id=id*26+(s[i]-'A');}return id;} 


//如果有小写字母,则把a~z作为26~51 

int hash(char s[],int len){int id=0,i;for(i=0;i<len;i++){if(s[i]>='A'&&s[i]<='Z'){id=id*52+(s[i]-'A');} else if(s[i]>='a'&&s[i]<='z'){id=id*52+(s[i]-'a')+26;}}return id;} 


//如果出现数字,一般有2种方法:
1.按照小写字母的处理方法,增大进制数至62。
2.如果保证在字符串的末尾是确定个数的数字,那么就可以把前面的英文字母的部分按
上面的思路转换成整数,再将末尾的数字直接拼上去。例如对由3个字符加一位数字组成的
字符串"BCD4" ,就可以将前面的"BCD"转换成731,然后直接拼上末位的4变为7314。

int hash(char s[],int len){int id=0,i;for(i=0;i<len-1;i++){id=id*26+(s[i]-'A');}id=id*10+(s[len-1]-'0');return id;} 


原创粉丝点击