在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)
#include<unordered_map>
class Solution {
public:
int FirstNotRepeatingChar(string str) {
if (str.empty())
return -1;
unordered_map<char, int> strMap;
/*
//构造strMap方法1:这是比较朴实的方法,一步步来。
for (int i = 0; i < str.length(); ++i)
{
int ch = str[i];
//若strMap为空或者其中没有这个字符,则添加进去,key为字符,value初始化为1
if (strMap.empty() || strMap.find(ch) == strMap.end())
{
strMap.insert({ ch,1 });
}
else
{
strMap[ch] += 1;
}
}
*/
//这样构造strMap显得高大上多了,其实不用特地把strMap中若之前没有ch拿出来初始化为1,
//因为strMap定义的时候,插入一个key值,对应int型的value就被初始化为0
for(auto ch:str)
{
++strMap[ch];
}
//由于要返回字符在原字符串的位置,所以直接以原字符串为依据遍历。
for (int i = 0; i < str.size(); ++i)
{
if (strMap[str[i]] == 1)
return i;
}
return -1;
}
};