问题描述:
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
案例:
s = "leetcode"
返回 0.
s = "loveleetcode",
返回 2.
注意事项:您可以假定该字符串只包含小写字母。
执行结果:
代码描述:
以下代码,第一个for循环中,
关于map的属性,关于使用索引判断是否存在某个键时,如果不存在,则会加入key,此时,m.count(key) = 1,但val = 0,因为并没有对val 赋值;
所以,m[s[i]]++; 如果s[i] 不存在,则map中先插入该key, 然后再0的基础上+1,
如果m[s[i]]已经存在,其值至少为1,再+1,则val >= 2。
class Solution {
public:
int firstUniqChar(string s) {
if(s.size() == 0) return -1;
if(s.size() == 1) return 0;
map<char, int> m;
for(int i = 0; i < s.size(); ++i)
{
m[s[i]]++;
}
for(int i = 0; i < s.size(); ++i)
{
if(m[s[i]] == 1) return i;
}
return -1;
}
};
以下代码,用count 提前判断了一下,是否key 在map中,不会额外添加key。当不存在时,采用insert 进行插入。
class Solution {
public:
int firstUniqChar(string s) {
if(s.size() == 0) return -1;
if(s.size() == 1) return 0;
map<char, int> m;
for(int i = 0; i < s.size(); ++i)
{
if(m.count(s[i]) > 0)
m[s[i]]++;
else
m.insert(make_pair(s[i], 1));
}
for(int i = 0; i < s.size(); ++i)
{
if(m[s[i]] == 1) return i;
}
return -1;
}
};