题目
在字符串中找出第一个只出现一次的字符。如输入"abaccdeff",则输出‘b’。
解题思路
- 建立一个哈希表,定义哈希表的键值(Key)是字符,而值(Value)是该字符出现的次数。同时我们需要从头开始扫描字符串两次。
- 第一次扫描字符串时,每扫描到一个字符,就在哈希表的对应项中把次数加1。
- 第二次扫描时,每扫描到一个字符,就能从哈希表中得到该字符出现的次数。这样,第一个只出现一次的字符就是符合要求的输出。
- 哈希表是一种比较复杂的数据结构,这里我们使用哈希表把一个字符映射成一个数字。在STL中,map和unordered_map实现了哈希表的功能。这里我们自己实现一个哈希表。
- 字符(char)是一个长度为8的数据类型,因此总共有256种可能。我们创建一个长度为256的数组,每个字母根据其ASCII码值作为数组下标对应数组的一个数字,而数组中存储的是每个字符出现的次数。
代码
class Solution{
public:
int FirstNotRepeatingChar(string str){
if(str.length() == 0) return -1;
int hash[256] = {0};
for(int i = 0; i < str.length(); i++)
hash[str[i]]++;
for(int i = 0; i < str.length(); i++){
if(hash[str[i]] == 1)
return i;
}
return -1;
}
};
class Solution{
public:
int FirstNotRepeatingChar(string str){
if(str.size() == 0) return -1;
map<char, int>item;
for(int i = 0; i < str.size(); i++) item[str[i]]++;
for(int i = 0; i < str.size(); i++){
if(item[str[i]] == 1)
return i;
}
return -1;
}
};