题目描述
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)
考察点:哈希表;字符串;对问题的优化。
思路:一般直接想到的就是找到一个字符,往后遍历,如果不再出现那就是第一次出现一次,复杂度较高。
本题先遍历一般,利用哈希表存储字母出现的次数。然后从第一个字符开始遍历,看次数是否为1。
是的话直接输出下标。
class Solution {
public:
int FirstNotRepeatingChar(string str)
{
const int tableSize = 256;
int hashTable[tableSize] = { 0 };//初始化哈希表
for (int i = 0; i < str.size(); i++)//统计字符出现次数
{
hashTable[str[i]]++;
}
for (int i = 0; i < str.size(); i++)//查找第一个出现1次的字符。
{
if (hashTable[str[i]] == 1)
return i;
}
return -1;
}
};