题目
在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出’b’。
思路
利用hash map来统计每个字符出现的次数。hash数组的长度为256,代表256个字符。遍历字符串中的每个字符,对每个字符出现的次数进行统计。最终遍历hash数组,取出第一个只出现一次的字符。
代码
#include <iostream>
#include <memory.h>
using namespace std;
char FirstNotRepeatingChar(char* pString)
{
if (pString == nullptr)
return '\0';
const int tableSize = 256;
unsigned hashTable[tableSize];
memset(hashTable, 0, sizeof(hashTable));
char* pHashKey = pString;
while (*(pHashKey) != '\0')
hashTable[*(pHashKey++)]++;
pHashKey = pString;
while (*pHashKey != '\0')
{
if (hashTable[*pHashKey] == 1)
return *pHashKey;
pHashKey++;
}
return '\0';
}
int main()
{
char str[] = "abaccdeff";
cout << "The first character that only occur once is: "
<< FirstNotRepeatingChar(str) << endl;
return 0;
}