(一)问题描述
在字符串中找到第一个只出现一次的字符。如“google”中第一个只出现一次的字符是“l”.
(二)思路分析
使用哈希表来记录每个字符出现的次数,因为字符char为8位,总共有256个值,所有哈希表有256个元素,其中把字符的ASCII码作为哈希表的键值,而对应键值储存的是该字符出现的次数。那么对给定的字符串进行两次遍历,第一遍收集信息,即统计每个字符串出现了多少次。第二遍查找第一个出现一次的字符,即碰到第一个只出现了一次的字符就进行输出。
(三)代码实现
class Solution {
public:
int FirstNotRepeatingChar(string str) {
int strSize = str.size();
//处理错误输入
if(strSize <= 0)
{
return -1;
}
//处理特殊输入
if(strSize == 1)
{
return 0;
}
//使用vector做一个哈希表,记录每个字符出现的次数,全部初始化为0
vector<int> hashTable(256, 0);
//for循环对输入字符串进行第一次遍历,统计每一次字符出现的次数
for(auto s:str)
{
hashTable[s]++;
}
//对输入的字符串进行第二次遍历
for(int j=0; j!=strSize; j++)
{
if(hashTable[str[j]] == 1)
{
return j;
}
}
return -1;
}
};