原题参见july大神博客系列【微软面试100题】
题目描述:在一个字符串中找到第一个只出现一次的字符。
分析思路:(本题亦见于《剑指offer》面试题35)
定义一个长度为256的数组,其中存放的是ASCII码为数组下表的字符的出现次数。这样需要遍历两次字符串,第一次遍历是更新数组,第二次遍历是找到第一个只出现一次的字符。其时间复杂度为O(n),空间复杂度为O(1)。参考代码如下:
char FindFirstSingleChar(char* str)
{
if (NULL == str)
return '\0';
unsigned int hashTable[256];
for(int i = 0; i < 256; ++i)
{
hashTable[i] = 0;
}
char* pChar = str;
while((*pChar) != '\0')
hashTable[(unsigned int) *(pChar++)]++;
pChar = str;
while((*pChar) != '\0')
{
if(hashTable[(unsigned int) *(pChar)] == 1)
return *pChar;
pChar++;
}
return '\0';
}