题目啊描述
在一个长为 字符串中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)
示例1 输入: "google" 返回值:4
题解1:使用unordered_map<char,ing>,其中key是字符,value是字符对应的个数
class Solution {
public:
int FirstNotRepeatingChar(string str) {
//题解1:暴力法
//两次遍历,第一次将各个字符存入unordered_map<char,int>中
//第二次遍历寻找value位1的key
map<char, int> m;
//第一次循环,将所有字符和对应字符个数存入map中
for(int i =0;i<str.size();i++){
if(m.find(str[i]) ==m.end())
m.insert(pair<char, int>(str[i],1));//字符第一次出现,个数置为1
//m.insert(make_pair(str[i],1));
else
(*m.find(str[i])).second++;//重复出现,个数累加
}
//第二次循环,找到个数位1的第一个字符
for(int i =0;i<str.size();i++){
if(m[str[i]] == 1)
return i;
}
return -1;
}
};
题解2:
class Solution {
public:
int FirstNotRepeatingChar(string str) {
unordered_map<char,bool> m;
for(int i =0;i<str.size();i++){
if(m.find(str[i]) ==m.end())
m.insert(make_pair(str[i], true));//字符第一次出现,value设置位true
else
(*m.find(str[i])).second = false;//重复出现,value设置位false
}
for(int i =0;i<str.size();i++){
if(m[str[i]] == true)
return i;
}
return -1;
}
};