【leetcode】387. First Unique Character in a String

返回第一个不重复的字符的下标


描述

返回第一个不重复的字符的下标

样例

样例1

1
2
输入: s = "leetcode"
输出: 0

样例2

1
2
输入: s = "loveleetcode"
输出: 2

思路

建立一个 maps ,用来判断某个字符在字符串中是否出现了两次以上,用一个 set 来保存禁止的字符,最后遍历原始字符串,遇到非禁止的字符返回这个字符。曾经错误的想法,想把每一个出现次数两次以上的字符都替换成 0 ,处理复杂度比较高。另外,可以考虑统计次数,显然次数为 1 的字符符合要求。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public:
int firstUniqChar(string s) {
set<char> ban;
bool maps[26];
memset(maps, false, sizeof(maps) / sizeof(maps[0]));
for (int i = 0; i < s.size(); i++) {
if (maps[s[i] - 'a']==true) {
ban.insert(s[i]);
}
else {
maps[s[i]-'a'] = true;
}
}
for (int i = 0; i < s.size(); i++) {
if (ban.find(s[i]) == ban.end()) {
return i;
}
}
return -1;
}
};

参考

原题链接