題目描述
在一個字符串(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;
}
};