题目:
在字符串中找到第一个只出现一次的字符。例如:输入“abcdbbcdd” , 则输出‘a’。
思路:
最直观的想法就是从头遍历扫描字符串中的每一个 字符。当访问到某一个字符是=时和后面的每一个字符比较,如果没有重复的,那么这个字符就是出现一次的字符。这种思路的时间复杂度O(n2)。
今天我们在探讨一种更快的方法。考虑到题目是与次数相关的,那么我们就统计每个字符出现的次数,并且存放下来那么一个字符对应一个次数 , 而且后面我们还要查找次数为1的字符。我们还让你容易想到 哈希表。定义哈希表的key是字符,value是该字符出现的次数。
C++标准模板库没有实现哈希表,那么我们就自己实现一个简单的哈希表。问题来了,如何实现?
code:
char FirstNotRepeatingChar(char* pString)
{
if (pString == NULL)
return '\0';
//创建哈希表
const int tableSize = 256;
unsigned int hashTable[tableSize];
for (unsigned int i = 0; i < tableSize; ++i)
hashTable[i] = 0;
//统计出现的次数
char* pStr = pString;
while (*pStr != '\0')
{
hashTable[*pStr++]++;
}
pStr = pString;
//找次数为1的字符
while (*pStr!='\0')
{
if (hashTable[*pStr] == 1)
{
return *pStr;
}
pStr++;
}
return '\0';
}