第一個只出現一次的字符

題目描述

在一個字符串(1<=字符串長度<=10000,全部由字母組成)中找到第一個只出現一次的字符,並返回它的位置。如果字符串爲空,返回-1

第一遍掃描這個數組時,每碰到一個字符,在哈希表中找到對應的項並把出現的次數增加一次。

字符(char)是一個長度爲8的數據類型,總共有可能256 種可能。創建一個長度爲256的數組,每個字母根據其ASCII碼值作爲數組的下標對應數組的對應項,而數組中存儲的是每個字符對應的次數。
第一遍掃描這個數組時,每碰到一個字符,在哈希表中找到對應的項並把出現的次數增加一次。這樣在進行第二次掃描時,就能直接從哈希表中得到每個字符出現的次數了。複雜度爲O(n).

class Solution {
public:
    int FirstNotRepeatingChar(string str) {
       if(str.length()==0)
           return -1;
        const int tableSize=256;
        unsigned int hashTable[tableSize];
        for(unsigned int i=0;i<tableSize;++i)
            hashTable[i]=0;
        int i=0;
        while(str[i]!='\0')
        {    hashTable[str[i]]++;
             ++i;
        }
        i=0;
        while(str[i]!='\0')
        {
            if(hashTable[str[i]]==1){
                return i;
            }
            i++;
        }    
        return -1;
    }
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章