Hash查找
Hash表用于存放key-value数据。比如一个学生的成绩,那么学生的学号可以当做key,成绩当做value,存放与hash表中。
Hash查找必须提供一个Hash函数,用于通过Key来计算数据存放在hash表中的位置。一般hash函数可以设计为key%N,其中N为hash表中元素的个数(一般为质数)。假如HASH表的大小为N,那么Hash函数为:
Hash(key)=key%N
当对于不同的两个key,计算出来的hash值可能相同,在相同的时候,就叫做hash冲突。解决hash冲突的方法不止一种,比如通过链式法解决,即将所有含有相同hash值的数据存放在同一个链表中,而将链表的头结点存放在HASH表中。
所谓hash查找,就是通过对应的key,按照hash函数,计算出数据在hash表中的位置。Hash查找的复杂度为O(1),所以具有较高的查找效率。
请编写一个高效率的函数来找出字符串中的第一个无重复字符。例如,"total"中的第一个无重复字符是’o’。
int hash(char ch)
{
return ch;
}
char find_first_norepeat_ch(const char *str)
{
int hasharr[256]={0};
char *s=(char *)str;
while(*s)
{
hasharr[hash(*s)]++;
s++;
}
s=(char *)str;
while(*s)
{
if(hasharr[*s]==1)
{
return *s;
}
s++;
}
return '\0';
}