google雜湊面試題
阿新 • • 發佈:2019-02-17
題目:在一個字串中找到第一個只出現一次的字元。如輸入abaccdeff,則輸出b。(用雜湊表解題) 分析:這道題是2006年google的一道筆試題。
友情提醒:ASCII碼使用指定的8位二進位制數組合來表示256種可能的字元。
解:
由於字元(char)是一個長度為8的資料型別,因此總共有可能256 種可能。於是我們建立一個長度為256的陣列,每個字母根據其ASCII碼值作為陣列的下標對應陣列的對應項,而陣列中儲存的是每個字元對應的次數。這樣我們就建立了一個大小為256,以字元ASCII碼為鍵值的雜湊表。(並不僅限於英文字元,所以這裡要考慮256種可能)。我們第一遍掃描這個陣列時,每碰到一個字元,在雜湊表中找到對應的項並把出現的次數增加一次。這樣在進行第二次掃描時,就能直接從雜湊表中得到每個字元出現的次數了。
友情提醒:ASCII碼使用指定的8位二進位制數組合來表示256種可能的字元。
解:
由於字元(char)是一個長度為8的資料型別,因此總共有可能256 種可能。於是我們建立一個長度為256的陣列,每個字母根據其ASCII碼值作為陣列的下標對應陣列的對應項,而陣列中儲存的是每個字元對應的次數。這樣我們就建立了一個大小為256,以字元ASCII碼為鍵值的雜湊表。(並不僅限於英文字元,所以這裡要考慮256種可能)。我們第一遍掃描這個陣列時,每碰到一個字元,在雜湊表中找到對應的項並把出現的次數增加一次。這樣在進行第二次掃描時,就能直接從雜湊表中得到每個字元出現的次數了。
char FirstNotRepeatingChar(char* pString) { // invalid input if(!pString) return 0; // get a hash table, and initialize it const int tableSize = 256; unsigned int hashTable[tableSize]; for(unsigned int i = 0; i < tableSize; ++ i) hashTable = 0; // get the how many times each char appears in the string char* pHashKey = pString; while(*(pHashKey) != '\0') hashTable[*(pHashKey++)] ++; //以字元的數值大小為雜湊陣列的下標 // find the first char which appears only once in a string pHashKey = pString; while(*pHashKey != '\0') { if(hashTable[*pHashKey] == 1) return *pHashKey; pHashKey++; } // if the string is empty // or every char in the string appears at least twice return 0; }