哈希表的应用,此题面试官主要考察的字符查找的时间效率,算法的时间复杂度为O(n),那么恭喜你通过此次笔试
例如:字符串 abscbams,那么 c 就是我们要找的目标
#define tableSize 256 //哈希表的大小,因为char占一个字节,最多能表示256个字符。
char FindFirstCharAppearOnce(char* pString)
{
if (NULL == pString) //输入不合法
return 0;
int hashTable[tableSize];
for (int i = 0; i < tableSize; i++)
hashTable[i] = 0;
//从头开始遍历,确定字符串中每个字符出现的次数
char* pHashKey = pString;
while (*(pHashKey) != '\0')
hashTable[*(pHashKey++)]++;
//找到字符串中只出现一次的那个字符
pHashKey = pString;
while (*pHashKey != '\0')
{
if (hashTable[*pHashKey] == 1)
return *pHashKey;
pHashKey++;
}
//如果这个字符串的每个字符都至少出现两次
return 0;
}
注意:我们最先想到的是对每个字符从头遍历,那么时间复杂度为O(n2),等到面试结束,自己却时时收不到offer,也不知道什么原因