哈希表的应用,此题面试官主要考察的字符查找的时间效率,算法的时间复杂度为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,也不知道什么原因
本文介绍了一种利用哈希表解决字符串中寻找仅出现一次的字符问题的方法,通过两次遍历实现,确保了时间复杂度为O(n)。首次遍历用于统计每个字符出现的次数,第二次遍历则用于找出第一次出现且仅出现一次的字符。
361

被折叠的 条评论
为什么被折叠?



