使用哈希表记录字符次数
char FindNoRepeat(char * str)
{
if (str == NULL||*str=='\0')
{
return NULL;
}
hash_map<char, int> hashmap;
char *tmp = str;
while(*tmp!='\0')
{
++hashmap[*tmp];
tmp++;
}
for (; *str != '\0';str++)
{
if (hashmap[*str] == 1)
{
return *str;
}
}
return '\0';
}
int main()
{
char str[1024];
gets_s(str);
cout<<FindNoRepeat(str);
return 0;
}
使用数组实现简单的哈希表:
char是长度为8位的数据类型,共256种可能,但是char类型默认是有符号的,需要转化为无符号型才能作为数组索引
char FindNoRepeat(char * str)
{
if (str == NULL||*str=='\0')
{
return NULL;
}
//hash_map<char, int> hashmap;
int hashmap[256];//char有256种可能取值
memset(&hashmap[0],0,sizeof(hashmap));
char *tmp = str;
while(*tmp!='\0')
{
++hashmap[(unsigned char)*tmp];//char类型默认是有符号型
tmp++;
}
for (; *str != '\0';str++)
{
if (hashmap[(unsigned char)*str] == 1)
{
return *str;
}
}
return '\0';
}
int main()
{
char str[1024];
gets_s(str);
cout<<FindNoRepeat(str);
return 0;
}