题目:在字符串中找到第一个只出现一次的字符。如输入“abaccdeff”,则输出‘b’。

分析:最直观解法,从头扫描这个字符串中的每个字符。当访问到某个字符时拿这个字符和后面的每个字符比较,如果在后面没有发现重复字符,则该字符就是只出现一次的字符。这种方法的时间复杂度为O(n2)。当然我们应该有更快的方法:利用哈希表的key和value,key是字符,value是次数。这样就只需要扫描字符串两次就可以。这里我们用每个字母的ASCII码值作为数组下标对应数组的一个数字,而数组中存储的是每个字符出现的次数。实现如下:

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* pHashKey=pString;
    while(*(pHashKey)!='\0')
        hashTable[*(pHashKey++)]++;
        
    pHashKey=pString;
    while(*pHashKey!='\0')
    {    
        if(hashTable[*pHashKey]==1)
            return *pHashKey;
        
        pHashKey++;
    }
    
    return '\0';
    
}