1. 程式人生 > >程式設計師面試一百題-13-第一個只出現一次的字元

程式設計師面試一百題-13-第一個只出現一次的字元

1-題目 :
在一個字串中找到第一個只出現一次的字元。

2-示例 :
輸入abaccdeff,輸出b

3-思路 :
第一遍掃描時,每碰到一個字元,在雜湊表中找到對應的項並把出現的次數加一;這樣在進行第二次掃描時,直接從雜湊表中得到每個字元出現的次數,打印出第一個次數為1的字元即可。

4-程式碼 :

#include <iostream>
using namespace std;

//true表示存在,false表示不存在或者字串為空
bool FirstNotRepeatedChar(char *pString)
{
    //若字串為空
    if (!pString)
    {
        return false;
    }

    //建立一個簡單的雜湊表,陣列的下標對應每一個字元,256的大小對應256個字元
    const int tableSize = 256;
    unsigned int hashTable[tableSize];
    for (unsigned int i = 0; i < tableSize)
    {
        //養成初始化的好習慣
        hashTable = 0;
    }

    //第一次遍歷字串
    char *pHashKey = pString;
    while (*pHashKey != '\0')
    {
        //得到每個字元出現的次數
        hashTable[*pHashKey]++;
        pHashKey++
    }
    //第二次遍歷字串
    pHashKey = pString;
    while (*pHashKey != '\0')
    {
        //若存在出現次數為1的字元,則列印並返回true
        if (hashTable[*pHashKey] == 1)
        {
            cout << "First not repeated char is : " << *pHashKey << ".";
            return true;
        }
        pHashKey++;
    }
    //若不存在出現次數為1的字元,則返回false
    return false;
}